2012-05-14 18 views
5

上の任意のイベントをトリガされていません...BACKBONE.JS同期は、私は非常に簡単なセットアップを持っているモデル

ルートは、ブートストラップを使用してモーダルダイアログを呼び出す設定です。

var response = Backbone.sync('read', this.model, { 
    success: function(data, textStatus, jqXHR) { alert('success'); }, 
    error: function(data, textStatus, jqXHR){ alert(fail); } 
}); 
:私はバインド呼び出しMYVIEWで

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

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

を初期化し、ボタンのクリックイベントにBackbone.syncを呼び出す - headerViewメニューがクリックされたメソッドを呼び出します

sync内のアラートが呼び出されますが、initializeのbindコマンドのアラートは呼び出されません。モデル内のバインドを動かして動かそうとしましたが、syncも試行しました:失敗、同期:完了。失敗。

+0

'Backbone.sync'を上書きするのはやりにくく、直接呼び出すのは奇妙です。なぜ、上位レイヤのコマンドを' Model.fetch() 'として使用しないのですか? – fguillen

答えて

4

ないあなたがそう言っていなかったので、どんなイベントがトリガされます。あなたは明示的にsuccesserrorコールバックを渡しています。これらのコールバックはイベントをトリガーする役割を担っています。

saveとして高い層のコマンドからネイティブBackbone.syncコール、createfetchsuccessを受け取り、errorは、それらのイベントをトリガしていますが、とてもこのネイティブ動作が不要になる独自のものを使用しているコールバックが。

example in the Model.save,in the Model.destroyなど。

しかし、先ほどのコメントで述べたように、Model.fetch()のようなより高いレイヤーのメソッドを使用する代わりに、Backbone.syncを直接呼び出す必要がある場合は、実際に考える必要があります。

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); 
}; 
関連する問題