Backbone.js Sync不会触发模型上的任何事件

时间:2012-05-14 20:04:24

标签: backbone.js

我的设置非常简单......

设置一个路径,使用bootstrap调用模态对话框。当单击菜单时,headerView调用方法 -

menuClick: function(e){
    e.preventDefault();
    if (!this.myView) {
        this.myView= new MyView({model: new MyModel()});
    }
    this.myView.render();
},

在MyView中,我在初始化

中调用bind
initialize: function(){
    this.model.bind('sync', function(model){ alert('test view')});
}

在按钮点击事件中调用Backbone.sync:

var response = Backbone.sync('read', this.model, {
    success: function(data, textStatus, jqXHR) { alert('success'); },
    error: function(data, textStatus, jqXHR){ alert(fail); }
});

同步中的警报被调用...但是初始化中的bind命令中的警报永远不会被调用。尝试在模型中移动绑定,将其移出,也尝试同步:失败,同步:完成。没有成功。

2 个答案:

答案 0 :(得分:4)

没有触发任何事件,因为您没有这样说。您正在传递明确的successerror回调,这些回调是必须负责触发事件的回调。

来自高层命令的原始Backbone.sync调用savecreatefetch接收successerror回调触发事件,但您使用自己的事件,以避免这种本机行为。

适用于example in the Model.savein the Model.destroy等等。

但是,正如我在之前的评论中所说,你真的应该考虑是否真的需要直接调用Backbone.sync而不是使用更高层的方法,如Model.fetch()

答案 1 :(得分:2)

尝试像这样实现Backbone.sync:

var sync = Backbone.sync;
Backbone.sync = function (method, model, options) {
    var success = options.success;
    options.success = function (resp, status, xhr) {
        //Your logic goes here
        console.log('succeed');
        if (success) success(resp, status, xhr);
    };
    options.error = function (xhr, ajaxOptions, thrownError) {
        console.log('failed');
    }
    sync(method, model, options);
};