组件初始化

defineComponent

描述: defineComponent({Object}propertiesAndMethods)

解释

方法 。定义组件的快捷方法。详细请参考组件定义文档。

用法

  1. var MyApp = san.defineComponent({
  2. template: '<ul><li s-for="item in list">{{item}}</li></ul>',
  3. initData: function () {
  4. return {
  5. list: ['san', 'er', 'esui', 'etpl', 'esl']
  6. };
  7. }
  8. });

compileComponent

版本:>= 3.3.0

描述: {void} compileComponent({Function}ComponentClass)

解释

方法 。编译组件,组件的编译过程主要是解析 template 成 ANode,并对 components 中的 plain object 执行 defineComponent。

组件会在其第一个实例初始化时自动编译。我们通常不会使用此方法编译组件,除非你有特殊的需求希望组件的编译过程提前。

用法

  1. var MyApp = san.defineComponent({
  2. template: '<ul><li s-for="item in list">{{item}}</li></ul>',
  3. initData: function () {
  4. return {
  5. list: ['san', 'er', 'esui', 'etpl', 'esl']
  6. };
  7. }
  8. });
  9. typeof MyApp.prototype.aNode // undefined
  10. san.compileComponent(MyApp);
  11. typeof MyApp.prototype.aNode // object

Component

类型: Function

解释

属性 。组件类,定义组件时可以从此继承。通常通过 san.defineComponent 定义组件,不使用此方法。详细请参考组件定义文档。

用法

  1. import {Component} from 'san';
  2. class HelloComponent extends Component {
  3. static template = '<p>Hello {{name}}!</p>';
  4. initData() {
  5. return {name: 'San'}
  6. }
  7. }

inherits

描述: inherits({Function}SubClass, {Function}SuperClass)

解释

方法 。一个通用的实现继承的方法,定义组件时可以使用此方法从 san.Component 继承。通常在 ES5 下通过 san.defineComponent 定义组件,在 ESNext 下使用 extends 定义组件。

绝大多数情况不推荐使用此方法。详细请参考组件定义文档。

服务端渲染

compileToRenderer

版本:>= 3.1.0

描述: {function(Object):string} compileToRenderer({Function}ComponentClass)

解释

方法 。将组件类编译成 renderer 方法。详细请参考服务端渲染文档。

用法

  1. var MyApp = san.defineComponent({
  2. template: '<ul><li s-for="item in list">{{item}}</li></ul>',
  3. initData: function () {
  4. return {
  5. list: ['san', 'er', 'esui', 'etpl', 'esl']
  6. };
  7. }
  8. });
  9. var render = san.compileToRenderer(MyApp);

compileToSource

版本:>= 3.1.0

描述: {string} compileToRenderer({Function}ComponentClass)

解释

方法 。将组件类编译成 renderer 方法的源文件。详细请参考服务端渲染文档。

用法

  1. var MyApp = san.defineComponent({
  2. template: '<ul><li s-for="item in list">{{item}}</li></ul>',
  3. initData: function () {
  4. return {
  5. list: ['san', 'er', 'esui', 'etpl', 'esl']
  6. };
  7. }
  8. });
  9. var renderSource = san.compileToSource(MyApp);
  10. fs.writeFileSync('your-module.js', 'exports = module.exports = ' + renderSource, 'UTF-8');

模板编译

ExprType

版本:>= 3.0.3

类型: Object

解释

属性 。表达式类型枚举,有助于帮你理解和使用 San 的模板编译结果。详细请参考ANode文档。

parseExpr

版本:>= 3.0.3

描述: {Object} parseExpr({string}source)

解释

方法 。将源字符串解析成表达式对象。详细请参考ANode文档。

用法

  1. var expr = san.parseExpr('!user.isLogin');
  2. /*
  3. expr = {
  4. type: ExprType.UNARY,
  5. expr: {
  6. type: ExprType.ACCESSOR,
  7. paths: [
  8. {type: ExprType.STRING, value: 'user'},
  9. {type: ExprType.STRING, value: 'isLogin'}
  10. ]
  11. }
  12. }
  13. */

parseTemplate

版本:>= 3.0.3

描述: {ANode} parseTemplate({string}source)

解释

方法 。将源字符串解析成 ANode 对象。如果你想使用 San 的模板形式,但是自己开发视图渲染机制,可以使用该方法解析模板。详细请参考ANode文档。

用法

  1. var aNode = san.parseTemplate('<p>Hello {{name}}!</p>');
  2. /*
  3. aNode = {
  4. "directives": [],
  5. "props": [],
  6. "events": [],
  7. "children": [
  8. {
  9. "isText": true,
  10. "text": "Hello {{name}}!",
  11. "textExpr": {
  12. "type": ExprType.TEXT,
  13. "segs": [
  14. {
  15. "type": ExprType.STRING,
  16. "value": "Hello "
  17. },
  18. {
  19. "type": ExprType.INTERP,
  20. "expr": {
  21. "type": ExprType.ACCESSOR,
  22. "paths": [
  23. {
  24. "type": ExprType.STRING,
  25. "value": "name"
  26. }
  27. ]
  28. },
  29. "filters": []
  30. }
  31. ]
  32. }
  33. }
  34. ],
  35. "tagName": "p"
  36. }
  37. */

数据

San 开放了组件中使用的数据容器类与表达式计算函数,开发者可以用来管理一些与组件无关的数据,比如应用状态等。

Data

版本:>= 3.5.6

类型: Class Function

解释

数据容器类 ,包含 get、set、splice、push、pop、unshift、shift、merge、apply 数据方法,详细请参考数据操作文档。

通过方法变更数据时,data 对象将 fire change 事件。通过 listen 和 unlisten 方法可以监听或取消监听 change 事件。

  1. var data = new san.Data({
  2. num1: 1,
  3. num2: 2
  4. });
  5. data.listen(function (change) {
  6. console.log(change.value);
  7. });
  8. data.set('num2', 10);
  9. // console 10

evalExpr

版本:>= 3.5.6

描述: {*} evalExpr({Object}expr, {Data}data, {Component=}owner)

解释

方法 ,计算表达式的值。

  • expr 可以通过 parseExpr 方法得到。支持的表达式类型可参考表达式文档
  • data 可以是组件的数据对象,也可以是自己通过 new Data 得到的数据对象
  • owner 仅用于表达式中 filter 的执行,表达式中无自定义 filter 时无需此参数
  1. var data = new san.Data({
  2. num1: 1,
  3. num2: 2
  4. });
  5. san.evalExpr(san.parseExpr('num1 + num2'), data)
  6. // console 3

其他

debug

类型: boolean

解释

属性 。是否开启调试功能。当同时满足以下两个条件时,可以在 chrome 中使用 devtool 进行调试。

version

类型: string

解释

属性 。当前的 San 版本号。

LifeCycle

版本: < 3.3.0 (已废弃)

类型: Function

解释

属性 。生命周期类。如果你想自己开发管理组件的渲染和交互更新过程,LifeCycle 可能对你有所帮助。

LifeCycle 定义了以下生命周期,并且生命周期之间包含互斥关系,描述如下:

  1. {
  2. compiled: {
  3. value: 1
  4. },
  5. inited: {
  6. value: 2
  7. },
  8. created: {
  9. value: 3
  10. },
  11. attached: {
  12. value: 4,
  13. mutex: 'detached'
  14. },
  15. detached: {
  16. value: 5,
  17. mutex: 'attached'
  18. },
  19. disposed: {
  20. value: 6,
  21. mutex: '*'
  22. }
  23. }

通过 LifeCycle 的 set 方法,可以指定生命周期; 通过 LifeCycle 的 is 方法,可以判断是否处于生命周期。

用法

  1. var lifeCycle = new san.LifeCycle();
  2. lifeCycle.set('attached');
  3. lifeCycle.is('attached'); // true
  4. lifeCycle.set('detached');
  5. lifeCycle.is('attached'); // false