覆盖Backbone.sync但保存其以前的功能

kre*_*eek 10 javascript backbone.js

我想要覆盖Backbone.sync,但是在添加之后还运行了原始的Backbone.sync功能.我想有点像在Java上用超级类调用super.有没有办法做到这一点,除了复制以前的所有代码?

Bri*_*kel 15

在JavaScript中,您可以将任何属性或方法存储在变量中.下面的示例将Backbone.sync分配给另一个变量,然后在函数结束时使用传递给新Backbone.sync函数的所有变量调用它.

var originalSync = Backbone.sync;
Backbone.sync = function() {
    // Your code here.
    return originalSync.apply(Backbone, arguments);
};
Run Code Online (Sandbox Code Playgroud)


bos*_*ood 6

上面的Brian Nickel提供的答案实际上会覆盖Backbonesync方法,这将影响所有Backbone模型.如果你想到的是覆盖sync单个模型类型,你可能更喜欢以下模式(同时确保sync使用Backbone文档中的正确签名覆盖):

var YourModel = Backbone.Model.extend({
    sync: function(method, model, options) {
        // do your custom work here
        return Backbone.Model.prototype.sync.call(this, method, model, options);
    }
});
Run Code Online (Sandbox Code Playgroud)

有关其工作原理的更完整信息,请参阅Backbone的注释源本身.希望有所帮助.