2012-01-17 47 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); 
    } 
}); 
云集