2012-05-14 66 views
5

我有一個非常簡單的設置...Backbone.js同步沒有觸發模型上的任何事件

設置路由使用引導調用模態對話框。該headerView呼籲單擊菜單時的方法 - 初始化

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

並調用Backbone.sync在一個按鈕單擊事件

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

在MyView的我調用bind在:

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

同步中的警報被調用...但初始化中綁定命令中的警報永遠不會被調用。嘗試移動模型內的綁定,將其移出,同時嘗試同步:失敗,同步:完成。沒有成功。

+0

覆蓋'Backbone.sync'是非常棘手的,看起來很奇怪,直接調用它。爲什麼你不使用高層命令作爲'Model.fetch()'? – fguillen

回答

4

沒有任何事件被觸發因爲你沒有這麼說。您正在傳遞明確的successerror回調,這些回調必須負責觸發事件。

來自高層的本土Backbone.sync調用命令,savecreatefetch收到successerror回調的觸發事件,但您使用的是自己所以這種原生的行爲消除。

對於example in the Model.savein the Model.destroy等。

但是,正如我在之前的評論中所說的,你真的應該考慮如果你真的需要直接調用Backbone.sync而不是使用更多更高層的方法,如Model.fetch()

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); 
};