5

我有一个非常简单的设置...

设置了一个使用引导程序调用模式对话框的路由。当单击菜单时,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); }
});

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

4

2 回答 2

4

没有任何事件被触发,因为你没有这么说。您正在传递显式successerror回调,它们必须负责触发事件。

Backbone.sync来自高层命令的本机调用,如、、save接收和回调这些触发事件,但您使用的是您自己的,因此可以避免这种本机行为。createfetchsuccesserror

例如Model.saveModel.destroy等等。

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

于 2012-05-15T11:48:17.147 回答
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);
};
于 2012-05-15T02:30:03.440 回答