这可能是一个简单的问题,但我花了一些时间,无法弄清楚该怎么做。
我有一个Backbone模型,并且试图将myData作为参数传递给namedAttributes中的MyModels。绑定并没有真正的帮助,因为“ this”是namedAttributes的上下文,而不是RS.Models.MyModel。
有什么建议么?
RS.Models.MyModel = Backbone.Model.extend({
myData: {},
namedAttributes: {
"collection": _.bind(function(attrs) {
// "this" is the wrong context. How do I access myData from here?
var options = {myData: this.myData};
return new RS.Models.MyModels(attrs, options)
}, this)
},
initialize: function(attributes, options) {
if (options && options.columnData) {
this.myData = options.myData;
}
},
});
最佳答案
您需要使namedAttributes为一个函数,以便它具有正确的上下文(然后在运行时对其进行评估)。出于这个原因,Backbone的许多属性也可以是返回值的函数(例如className,attribute等),并且在您要执行逻辑来决定返回值是什么的情况下。下划线为此具有一个称为_.result
的函数:
RS.Models.MyModel = Backbone.Model.extend({
myData: {},
namedAttributes: function() {
return {
collection: new RS.Models.MyModels({myData: this.myData})
};
},
initialize: function(attributes, options) {
if (options && options.columnData) {
this.myData = options.myData;
}
},
});
您将通过
namedAttributes
获得_.result(this, 'namedAttributes')
的值。如果它绝对是一个函数,并且您想将
attrs
传递给它,则this.namedAttributes.call(this, attrs)
将起作用。 _.result
用于当它可以是对象或函数时。