EBa*_*arr 7 backbone.js underscore.js
当使用backbone.js和下划线的伴随模板引擎时,我注意到大多数示例model.ToJSON()在渲染时调用而不是仅仅传递model.我知道我的模板必须修改它检索数据的方式.
我想知道为什么我们从toJSON()得到什么好处?
典型例子
在典型示例model.toJSON()中,在渲染时调用.注意,为了简洁起见,我将模板作为字符串文字放入.
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=ToDoNote%></li>'),
render : function () {
var out= this.template(this.model.toJSON()); //<--JSON
$(this.el).html( out) }
return this;
}
}); //end view
Run Code Online (Sandbox Code Playgroud)
一种替代方法
我挖掘了主干0.9.2并强调了1.3.3代码.在骨干中,注意到model.toJSON()以下内容:_.clone(this.attributes).在模板渲染引擎内,我编译的模板命名传递数据obj.
在看到这些片段之后,我意识到克隆属性是没有必要的.相反,我可以直接传入我的模型(虽然模板中有一些语法更改).就像是 ...
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=obj.get('ToDoNote')%></li>'), //<--notice GET()
render : function () {
var out= this.template(this.model); //<-- look ma no json
$(this.el).html( result ) }
return this;
}
}); //end view
Run Code Online (Sandbox Code Playgroud)
看看这两个例子,我可以提出调用JSON的唯一原因是:
obj[ namepart + someindex])访问值 我的问题归结为:为什么我会调用toJSON()并获取克隆属性的命中,而不是仅仅在我的模板中使用get()?
ggo*_*zad 12
也许以下有意义:
插值而不是评估是一个很大的成本.所以你的模板的版本是实际上比调用慢了许多toJSon(),并利用评价研究.
逻辑属于视图而非模板.只有在必要时才应在模板中引入js代码(以及插值的需要).
有人可能会说你应该通过model.attributes而不是model.toJSON()避免克隆.我想不这样做的原因是避免允许模板更改模型的属性.此外,您通常可能希望增加model.toJSON()其他内容的结果,这显然是您不想对其进行的model.attributes
| 归档时间: |
|
| 查看次数: |
6174 次 |
| 最近记录: |