如何调用父级backbone sync方法

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个回答

9
据我所知,Backbone.sync会检查是否有本地定义的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); 
    }
});

这是我从这里这里收集到的关于在Backbone.js中使用请求方法和同步修改URL的内容。


3
我之前使用过这种方法,发现它效果很好,特别是如果你需要一个特定于模型的同步。直接修改Backbone.sync(如另一个答案所示)会影响所有模型,这可能不是你需要的。 - erturne

4
尝试这样做,可能不是最好的解决方案,但它可以工作:


var parentSyncMethod = Backbone.sync; // 保存父方法,重写
Backbone.sync = function() {
    // 在此添加您的代码。
    var parentSyncMethod.apply(Backbone, arguments);
};

希望能在某种程度上有所帮助。


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

1

Backbone.prototype.sync.call 不起作用,因为原型上没有定义 sync。在控制台中检查 Backbone 对象以查看其结构。您需要将自己的方法命名为其他名称,或在覆盖自己的实现之前保存对原始 sync 方法的引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接