0
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, ...)方法在这里不起作用,因为我从未将此模型初始化为实例。有任何想法吗?谢谢。

4

1 回答 1

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里面?扩展一个字符串很奇怪,但是传递三个参数Backbone.Model.extend是没有意义的,它只关心两个参数。如果你想要静态属性,那么你应该将它们作为第二参数传递:

var JavascriptHelper = Backbone.Model.extend({}, { myFn: ... });
于 2012-06-08T04:38:40.487 回答