Download - KISSY XTemplate

Transcript
Page 1: KISSY XTemplate

KISSY xtemplate 实现与展望

[email protected]

承玉

Page 3: KISSY XTemplate

功能简介

• 变量渲染/转义

• 表达式

• 控制语句

• 层次访问

• 命令扩展

• 子模板

• 报错

Page 4: KISSY XTemplate

变量渲染

• {{x}}

• {{{x}}}

Page 5: KISSY XTemplate

表达式

• + - * / %

• && || === >= <=

• {{x+2}}

• {{#if x>2}}

Page 6: KISSY XTemplate

控制语句

• {{#if}}{{/if}}

• {{#each}}{{xindex}}{{this}}{{/each}}

• {{#with obj}}{{y}}{{/with}}

• obj.y.z

Page 7: KISSY XTemplate

层次访问

• {{#with y}}{{../../x}}{{x}}{{/each}}

• {

x: 1,

y: {

x: 2

}

}

Page 8: KISSY XTemplate

命令扩展

• {{myCommand 1 2 3 4 x x+2 x*3}} • {{#my xx}}{{x}}{{y}}{{/my}}

• function myCommand(scopes,option){

option.params //=> [‘x’,1] option.hash // {y:2} scopes.unshift({ xindex: 1}); “html”+option.fn(scopes,)+”end” return “xxx”; }

Page 9: KISSY XTemplate

子模板

• {{include ‘x-tpl’}}

• x-tpl

– {{x}}

• 1.3

– Xtemplate.addSubTpl(‘x-tpl’,’{{x}}’)

Page 10: KISSY XTemplate

range

• {{set x=1}}

• Array [1 .. 10]

• {{#range x y}}{{/range}}

Page 11: KISSY XTemplate

报错处理

• ‘{{x}}\n{{y’

• xx.tpl

• {{x}}\n{{y

------------^ unclosed error at line 2

Page 12: KISSY XTemplate

实现

• 设计语法

• 生成解析器

• 翻译代码

• 执行引擎

• 划分模块

Page 13: KISSY XTemplate

设计语法

• {{mustache}}

• 词法

• 语法

Page 14: KISSY XTemplate

词法

• 识别基本元素

• Open

• Id

• operator

Page 15: KISSY XTemplate

语法

• 描述程序结构

• lalr

• Program

• Statement xx

• Tpl {{x}}

Page 16: KISSY XTemplate

解析器生成

• kison

– https://github.com/kissyteam/kissy/tree/master/src/kison

–解析器生成工具

• 词法+语法 -> kison -> parse.js

Page 17: KISSY XTemplate

parser.js

• module

• parse()

–标记语法树

– parse(‘my\n{{x}}’)

program

Content:

line:1

value: my\n

tpl:

line:2

Id:

line:2

value: x

Page 18: KISSY XTemplate

翻译代码

• 遍历序列化生成 js 函数

• var source = “var out=[];”;

If(node.type == ‘id’){

source+=‘out.push(context.’+ node.name+’)’;

} else { … }

source+=‘return out.join(“”);’;

Page 19: KISSY XTemplate

执行

• {{my}}

• new Function(“context”, source)({my:1});

Page 20: KISSY XTemplate

划分模块

• xtemplate/compiler 翻译代码

–离线 (工具编译)

–在线(客户端浏览器)

• xemplate runtime

–在线

• xtemplate requires [‘compiler’, ‘runtime’]

Page 21: KISSY XTemplate

展望

• 功能

–模板与模块

• {{include “x/y”}}

– x/y.js

• KISSY.add(‘x/y’, ‘{{x}}{{include “x/z”}}’,{requires:[‘x/z’]});

Page 22: KISSY XTemplate

展望

• 功能

– extend

• Layout.tpl – {{header}}

{{#override content}}<b>{{x}}</b>{{/override }}

- Item2.tpl

{{extend layout}}

• Item1.tpl – {{extend layout}}

{{#override content}} <i>{{x}}</i>{{/override }}

Page 23: KISSY XTemplate

展望

• 前后端统一模板

–同步渲染

• Java/php

–异步渲染 • Js

• 同一套语法,离线翻译成不同语言的原生实现

Page 24: KISSY XTemplate

展望

• 数组类型支持

• Range 命令

• python django jinja2

• jade


Top Related