Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干网';s模型原型提取与主干提取_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript 主干网';s模型原型提取与主干提取

Javascript 主干网';s模型原型提取与主干提取,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我在看一个网站的模型代码,我有一个关于原型的问题。我知道这对于Javascript中的继承很有用 在这个例子中 define([], function () { "use strict"; /** * Data Model * * @type {Backbone.Model} */ var DataModel = Backbone.Model.extend({ defaults : { },

我在看一个网站的模型代码,我有一个关于原型的问题。我知道这对于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(这是参数)而不是普通的旧
Model.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()


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

这样做是为了在调用实际的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()


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

请不要添加签名;除此之外,它们是噪音,不会增加任何问题,您的帖子是用您的用户卡签名的。请记住,谢谢@DaedalusPlease,请勿添加签名;除此之外,它们是噪音,不会增加任何问题,您的帖子是用您的用户卡签名的。请记住,谢谢@DaedalusNote,
if
分支中的
返回
应该返回一个承诺,因为代码可能依赖于该接口。@try catch finally您能详细说明吗?为什么需要返回承诺对象?如果我有我的局部变量?有点困惑。一个代码真的很有用@想象一下其他开发人员正在使用您的模型。。。他会假设fetch像普通模型一样返回一个jqxhr。因此,如果您重写它并返回原语或其他内容,他的代码将被破坏。请参阅回答中的更新。请注意,
if
分支中的
返回应返回承诺,因为代码可能依赖于该接口。@最后重试捕获。您能详细说明吗?为什么需要返回承诺对象?如果我有我的局部变量?有点困惑。一个代码真的很有用@想象一下其他开发人员正在使用您的模型。。。他会假设fetch像普通模型一样返回一个jqxhr。因此,如果您重写它并返回原语或其他内容,他的代码将被破坏。请参阅答案中的更新。