Javascript 主干:维护对';这';对于回调中的模型
通常的Javascript 主干:维护对';这';对于回调中的模型,javascript,backbone.js,this,underscore.js,Javascript,Backbone.js,This,Underscore.js,通常的.bindAll(this,…)方法在这里不起作用,因为我从未将此模型初始化为实例。有什么想法吗?谢谢。您可以手工完成: var JavascriptHelper = Backbone.Model.extend("JavascriptHelper", {}, // never initialized as an instance { myFn: function() { $('.selector').l
.bindAll(this,…)
方法在这里不起作用,因为我从未将此模型初始化为实例。有什么想法吗?谢谢。您可以手工完成:
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()');
}
}
);
或者,如果另一个fn
不关心调用this
时它是什么(或者如果它希望this
成为live
使用的内容):
顺便说一句,它已被弃用,取而代之的是。另外,如果您没有实例化JavascriptHelper,那么为什么它是一个主干.Model呢?为什么不使用简单的对象文字:
myFn: function() {
$('.selector').live('click', JavascriptHelper.anotherFn);
}
你期望这个构造是什么:
var JavascriptHelper = {
myFn: function() {
//...
},
anotherFn: function() {
//...
}
};
将您留在JavascriptHelper
中?扩展字符串很奇怪,但将三个参数传递给主干.Model.extend是没有意义的。如果需要静态属性,则应将其作为以下内容传递:
不管主干的内部工作方式如何(我不熟悉),
this.anotherFn()
不会引用具有.myFn和.anotherFn属性的对象,而是指向传递给事件处理程序的DOM元素jQuery。尝试var=this在myFn级别(在传递给jQuery的.live的处理程序函数之外)使用code>,然后在处理程序内部使用that.anotherFn()
,这应该可以工作(除非主干显式地将扩展对象绑定到其他对象,这将是不幸的)对于混淆,我深表歉意,我实际上在使用Parse,但不想让人感到困惑,所以我将它改为Backbone.Model from Parse.Object,以便人们更容易理解(Parse是Backbone的扩展)。好建议!我正在将所有助手更改为对象文字。谢谢!
var JavascriptHelper = {
myFn: function() {
//...
},
anotherFn: function() {
//...
}
};
var JavascriptHelper = Backbone.Model.extend(string, {}, {...})
var JavascriptHelper = Backbone.Model.extend({}, { myFn: ... });