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, ...)
方法在这里不起作用,因为我从不将此模型初始化为实例。有任何想法吗?感谢。
答案 0 :(得分:1)
你可以手工完成:
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
?扩展字符串很奇怪,但将{3}个参数传递给Backbone.Model.extend
毫无意义,it only cares about two arguments。如果你想要静态属性,那么你应该将它们作为the second argument传递:
var JavascriptHelper = Backbone.Model.extend({}, { myFn: ... });