Javascript 主干网';s模型原型提取与主干提取
我在看一个网站的模型代码,我有一个关于原型的问题。我知道这对于Javascript中的继承很有用 在这个例子中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 : { },
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。因此,如果您重写它并返回原语或其他内容,他的代码将被破坏。请参阅答案中的更新。