Backbone的模型原型获取与骨干提取

时间:2016-05-07 08:32:16

标签: javascript backbone.js marionette

我正在查看网站的模型代码,我对原型有疑问。我知道这对Javascript中的继承很有用。

在这个例子中......

define([], function () {

    "use strict";

    /**
     * Data Model
     *
     * @type {Backbone.Model}
     */
    var DataModel = Backbone.Model.extend({

        defaults : {

        },

        urlRoot : '/api/..../../..',

        fetch : function() {
            Backbone.Model.prototype.fetch.apply(this, arguments);
        }
    });

    return Datamodel;
});

为什么我们需要Backbone.Model.prototype.fetch.apply(this, arguments);而不是普通的Model.fetch();

我非常困惑。为什么甚至使用原型来取东西?我无法理解这里的用例。

请帮忙。

1 个答案:

答案 0 :(得分:4)

这样做是为了在调用实际的fetch方法之前进行一些预处理。换句话说,我们使用自定义逻辑覆盖模型fetch方法,如果需要,最终会调用原始的fetch方法。

例如:

fetch : function(options) {
    if(options.someFlag){
           var dfd = jQuery.Deferred();
           // fetch the data from localStorage
           // dfd.resolve(resultingDataFromLocalStorage);
           return dfd.promise();
    }
    return Backbone.Model.prototype.fetch.apply(this, arguments);
}

这比使用代码决定如何在调用model.fetch()的所有视图中进行提取的代码更好的解决方案。

当然,如果没有自定义逻辑,就像在你的例子中一样,这是非常不必要的。