2012-01-17 49 views
7

在我的應用程序重寫Backbone.sync如下:如何調用父骨幹同步方法

Backbone.sync = function(method, model, options){ 
    //Some custom code 

    //THIS FAILS. 
    Backbone.prototype.sync.call(this, method, model, options); 
}} 

我的問題是,我該如何調用原始同步方法?我需要使用this.sync嗎?

回答

4

嘗試這樣的事情,可能不是最好的解決方案,但它的工作原理:

 

var parentSyncMethod = Backbone.sync; //save parent method, the override 
Backbone.sync = function() { 
    // Your code here. 
    var parentSyncMethod.apply(Backbone, arguments); 
}; 
 

希望它有助於在某種程度上,因爲sync未在原型定義

1

Backbone.prototype.sync.call將無法​​正常工作。檢查控制檯中的Backbone對象以查看其結構。您需要爲自己的方法命名其他名稱,或者在使用自己的實現覆蓋之前,保存對原始方法sync方法的引用。

9

據我瞭解,Backbone.sync檢查,看看是否有本地定義同步的版本,並調用調用全球Backbone.sync前:

(this.sync || Backbone.sync) 

所以,考慮到你的模型是什麼像TestModel。我想你可以做這樣的事情(請原諒,我這可能不是正確的語法,JavaScript是遠離我的專業):

var TestModel = Backbone.Model.extend({ 

    "sync": function(method, model, options) { 
     //Some custom code 

     Backbone.sync(method, model, options); 
    } 
}); 

這是我從herehere

+3

我以前使用過這種方法,發現它運行良好,特別是在需要特定於模型的同步時。直接改變Backbone.sync(如另一個答案中所示)將影響所有模型,這可能不是您需要的。 – erturne 2012-02-09 13:25:26

4
var TestModel = Backbone.Model.extend({ 
    sync: function(method, model, options){ 
     // some code here 
     return Backbone.sync(method, model, options); 
    } 
}); 
雲集