为什么drawSomething不起作用

时间:2014-11-03 15:36:42

标签: backbone.js

我使用骨干测试某些东西,但我不知道为什么drawSomething没有显示@@"

initialize: function() {
    setInterval(function() {
        //alert("Hello");
        this.drawSomething();
    }, 1000);
},
drawSomething: function() {
    alert('hi');
},

3 个答案:

答案 0 :(得分:1)

问题在于setInterval内部回调上下文this不是您所期望的(它的全局对象window)。最简单的解决方法是在变量中保存适当的对象引用:

var self = this;
setInterval(function() {
    //alert("Hello");
    self.drawSomething();
}, 1000);

答案 1 :(得分:0)

因为你正在使用骨干,所以你也可能使用下划线。绑定应该有所帮助:

initialize: function () {
    var foo = function () { this.drawSomething(); };
    foo = _.bind(foo, this);
    setInterval(foo, 1000);
}

或jQuery模拟代理:

foo = $.proxy(foo, this);

答案 2 :(得分:0)

作为快速解决方案

initialize: function() {
    setInterval(function() {
        //alert("Hello");
        this.drawSomething();
    }.bind(this), 1000);
},
drawSomething: function() {
    alert('hi');
},

但我更愿意使用额外的变量作为dfsq methioned,因为一些旧的浏览器不支持bind