这可能是一个简单的问题,但我已经花了一些时间,我无法弄清楚该怎么做。
我有一个Backbone模型,我正在尝试将myData作为参数传递给namedAttributes中的MyModels。 Bind并没有真正帮助,因为“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;
}
},
});
答案 0 :(得分:1)
您需要使namedAttributes成为一个函数,以便它具有正确的上下文(然后在运行时进行评估)。 Backbone的许多属性也可以是由于这个原因返回值的函数(例如className,属性等) - 并且如果你想执行逻辑来决定返回值是什么。为此,Underscore有一个名为_.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
适用于何时可以是对象或函数。