Backbone.sync范围问题

时间:2014-03-06 11:25:36

标签: javascript backbone.js scope

我目前正在使用backbone.sync将我的集合发送到PHP函数,该函数将我的信息存储在数据库中并根据他的数据返回一些数据。

一切正常,直到我.sync()的成功功能,因为我失去了模型和集合的范围,所以我无法更新它们,有什么方法可以解决这个问题吗?

我尝试使用两种方法,似乎都没有返回任何内容,我在这里或Google上找不到有关此主题的更多信息。在我的偏好中也避免使用model.save(),因为对后端的调用太多了。

方法1;

var that=this;
// some logic is done here
backbone.sync("update",this.collection,{
    success:function(data){
        // attempt to update this.collection here, but `that` is out of scope
        // and the scope of `this` is different 
    }
});

方法2:

var that=this;
var onDataHandler=function(data){
    // attempt to update this.collection here, but `that` is out of scope
    // and the scope of `this` is different 
};
// some logic is done here
backbone.sync("update",this.collection,{
    success:onDataHandler
});

有没有人知道解决这个问题的方法?我检查了Backbone文档并注意到collection.fetch()函数委托给.sync(),但第二种方法是我用于.fetch()的方法,它可以很好地保持that的范围1}}

1 个答案:

答案 0 :(得分:0)

尝试:

var that=this;
var prebindHandler=function(data){
    // attempt to update this.collection here, but `that` is out of scope
    // and the scope of `this` is different 
};
successHandler = prebindHandler.bind(this);
// some logic is done here
backbone.sync("update",this.collection,{
    success:successHandler
});

Further Reading on .bind