我有一个使用require.js的Backbone应用程序,如果在链下面定义的资源是通过原型链继承的,我会尝试解决这个问题。如果这是正确的最佳做法,我应该再次定义它们吗?
我的例子中,我有一个基本模型,它提供了一些在我所有模型中都很常见的自定义行为。
// Base Model
define([
'backbone'
],
function (Backbone) {
'use strict';
return Backbone.Model.extend({
fetch: function (options) {
options = options ? options : {};
options.data = options.data ? options.data : {};
options.data.nocache = $.now();
return Backbone.Model.prototype.fetch.call(this, options);
}
});
});
然后我有其他扩展基本模型的模型来继承这些常用函数。
// Some other model
define([
'app',
'backbone',
'models/base/model'
],
function(App, Backbone, BaseModel) {
'use strict';
return BaseModel.extend({
url : function() {
return 'some/url/;
}
});
});
正如您所看到的,我已将backbone
定义为两个模型中的资源,但由于其他模型继承自基本模型。我真的需要在这里定义骨干吗?
我正在寻找最佳实践,谢谢!
答案 0 :(得分:1)
我总是定义模块运行所需的一切。如果你不这样做,它就不是真正的便携式。如果您将来删除上游依赖项,那么您的下游模型也可能会中断。即,
define('a', ['app','backbone','myplugin', ...]
define('b', ['app','backbone','a', ...]
如果b
和a
都使用myplugin
,那么当您从a
移除myplugin
时,将来某个时间a
不再需要它{1}}您将在不知情的情况下中断b
。
答案 1 :(得分:1)
如果你有一堆some-other-models
,我建议把它们放到你的require.js配置文件的垫片中:
require.config({
paths: {
'backbone': 'path/to/backbone'
},
shim: {
'models/*': { deps: [ 'backbone' ] }
}
});
然后,您将能够为some-other-model
知道backbone
已经存在的代表声明deps:
define(['app', 'models/base/model'], function (App, BaseModel) {
// backbone is already loaded here
});