我必须在 render()
函数中使用 guid
变量,但我只能将它传递给构造函数。我这个代码:
app.views.CompanyView = Backbone.View.extend({
el: '#company-view',
guid: '',
initialize: function (options) {
this.guid = options.guid;
},
render: function () {
var guid = this.guid;
}
});
我这样创建 View :
app.currentView = new app.views.CompanyView({guid: guid});
然后我将 render()
函数作为参数传递,以将其用作回调:
function call(callback){
callback();
}
call(app.currentView.render);
我也尝试了 this.guid
、options
和 this.options
,但它们都是 undefined
.有没有办法在不使用它的参数或全局变量的情况下将此变量传递给 render()
函数?这是一个 JsFiddle example .
最佳答案
当你通过这个调用render
时:
function call(callback){
callback();
}
您将其作为普通函数调用,因此 render
中的 this
将是 window
。请记住,JavaScript 中的 this
取决于函数的调用方式,而不是函数的定义方式(当然除非您正在使用绑定(bind)函数)。
您有一些选择:
使用
_.bindAll
将render
绑定(bind)到 View ,_.bind
,$.proxy
,Function.bind
, ...initialize: function() { _.bindAll(this, 'render'); }
如今更常见的方法是通过函数传递上下文,然后调用回调的人使用适当的上下文使用
call
或apply
:function call(callback, context){ callback.apply(context); }
自己动手:
call(function() { v.render() });
这通常采用
var _this = this;
的形式,后跟一个使用_this.some_method()
而不是仅仅传递this 的匿名函数。 some_method
作为回调。
我更喜欢第二种选择。
关于javascript - 调用渲染作为回调时访问 View 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198645/