从对象声明中访问变量
Accessing variables from object declaration
这可能是一个简单的问题,但我花了一些时间,我不知道该怎么做。
我有一个骨干模型,我试图传递myData作为参数到MyModels在namedAttributes。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;
}
},
});
您需要使namedAttributes成为一个函数,以便它具有正确的上下文(然后在运行时对其进行评估)。由于这个原因,Backbone的许多属性也可以是返回值的函数(例如className, attributes等)——如果你想执行逻辑来决定返回值将是什么。下划线有一个名为_.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;
}
},
});
用_.result(this, 'namedAttributes')
可以得到namedAttributes
的值。
如果它确实是一个函数,并且您想将attrs
传递给它,那么this.namedAttributes.call(this, attrs)
就可以了。_.result
用于既可以是对象也可以是函数
相关文章:
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 查询后websql成功回调无法访问变量
- 无法访问变量
- 从ajax调用成功内部访问变量
- 从子弹出子窗口访问变量
- 下划线模板无法访问变量
- Meteor Iron路由器通过[data]vs[params]访问变量
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 如何从嵌套函数中访问变量
- 在<%%中定义的访问变量>从<脚本></脚本>
- 自提交表单访问变量javascript
- 如何访问变量
- 稍后在链中访问变量
- 在 Javascript 中访问变量
- 在方法调用对象之外访问变量而不使它们全局化(可能吗?
- 如何从函数/实例外部访问变量
- 从另一个脚本源访问变量
- Meteor:跨所有 Meteor.method的访问变量
- 每次加载页面时,火狐附加组件访问变量
- 在另一个函数中访问变量,返回未定义的 - JavaScript