【发布时间】:2012-06-30 14:22:03
【问题描述】:
我正在尝试找出一些“模式”来建立一个主干项目。在下面的例子中,在“render”函数中,作者返回了一个“this”的实例。
这是为什么?它是特定于示例的,还是 Backbone 常见的?我不明白为什么要在“渲染”函数中返回“this”。
示例
http://backbonefu.com/2011/08/filtering-a-collection-in-backbone-js/
【问题讨论】:
我正在尝试找出一些“模式”来建立一个主干项目。在下面的例子中,在“render”函数中,作者返回了一个“this”的实例。
这是为什么?它是特定于示例的,还是 Backbone 常见的?我不明白为什么要在“渲染”函数中返回“this”。
示例
http://backbonefu.com/2011/08/filtering-a-collection-in-backbone-js/
【问题讨论】:
这只是一种常见做法,因此您可以调用 render() 并链接另一个方法调用。
Views 不会在页面中插入其 HTML 内容是一种常见的模式,而这项工作是由实例化 View 的实例完成的第一名。
那么你必须在实例化视图的代码中编写如下内容:
var myView = new MyView({ model: myModel });
myView.render();
$(myDOMElement).html( myView.el );
但如果render() 返回视图本身,您可以像这样编写上面的代码:
var myView = new MyView({ model: myModel });
$(myDOMElement).html( myView.render().el );
【讨论】:
返回this的意思,是为了提供链接的可能性。
例如,假设:
var obj = {
prop1 : 0,
method1 : function(){
},
method2 : function(){
}
};
//Then you could do something like:
obj.method1();
obj.method2();
obj.prop1 = 1;
obj 上的所有操作都需要单独执行。
现在考虑:
var obj = {
prop1 : 0,
method1 : function(){
return this;
},
method2 : function(){
return this;
}
};
//Now you could do these
obj.method1().prop1 = 1;
obj.method1().method2().method1();
【讨论】: