主干:在回调中维护对模型的“this”引用的最简单方法
Backbone: Easiest way to maintain reference to 'this' for a Model inside callbacks
var JavascriptHelper = Backbone.Model.extend("JavascriptHelper",
{}, // never initialized as an instance
{
myFn: function() {
$('.selector').live('click', function() {
this.anotherFn(); // FAIL!
});
},
anotherFn: function() {
alert('This is never called from myFn()');
}
}
);
通常的_.bindAll(this, ...)
方法在这里不起作用,因为我从未将此模型初始化为实例。有什么想法吗?谢谢。
你可以手动完成:
myFn: function() {
$('.selector').live('click', function() {
JavascriptHelper.anotherFn();
});
}
或者,如果anotherFn
不在乎this
是什么,当它被调用时(或者它是否希望this
是live
使用的):
myFn: function() {
$('.selector').live('click', JavascriptHelper.anotherFn);
}
顺便说一句,live
已被弃用,取而代之的是on
。另外,如果你没有实例化你的JavascriptHelper,那么为什么它是一个Backbone.Model呢?为什么不使用简单的对象文字:
var JavascriptHelper = {
myFn: function() {
//...
},
anotherFn: function() {
//...
}
};
你期待这个结构是什么:
var JavascriptHelper = Backbone.Model.extend(string, {}, {...})
把你留在JavascriptHelper
?扩展字符串很奇怪,但将三个参数传递给Backbone.Model.extend
是没有意义的,它只关心两个参数。如果你想要静态属性,那么你应该将它们作为第二个参数传递:
var JavascriptHelper = Backbone.Model.extend({}, { myFn: ... });
相关文章:
- jQuery$(this)引用未定义
- Javascript对象文字,如何使用“this”来引用对象中的变量
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 为什么“exports”在nodejs模块中引用与“this”相同的对象
- React如何调用ES6类的呈现函数,使“this”不引用类本身
- 在 javascript 中将“this”引用传递给方法的提示
- 如何避免“this”引用 DOM 元素,并引用对象
- 主干:在回调中维护对模型的“this”引用的最简单方法
- jQuery Resize 会丢失“this”引用
- 将“this”引用到自定义变量
- 如何使“this”引用成员函数而不是其所有者类的实例
- Google Geocoder 和 TypeScript 中的“this”引用
- Javascript“this”-引用包含对象
- 我以为我有一个this引用传递到Javascript闭包中的私有函数,我想错了
- 我怎样才能确保'this'引用对象文字中的对象文字
- Ajax.BeginForm JavaScript回调参数导致$(this)引用窗口而不是窗体
- 如何防止方法's ' this '引用调用它的对象
- 有没有可能保护'this'引用绑定对象内的函数
- “this”引用在nodeJs中不起作用
- JavaScript 'this' 引用了错误的范围