使用RequireJS:我应该定义继承的资源吗?
Using RequireJS: should I define inherited resources
我有一个使用require.js的骨干应用程序,我试图弄清楚,如果在链下定义的资源是通过原型链继承的,这似乎是这样的情况。如果这是正确的,那么什么是最佳实践,我是否应该重新定义它们?
在我的例子中,我有一个基本模型,它提供了一些自定义行为,这些行为将在我所有的模型中通用。
// 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
定义为两个模型中的资源,但由于其他模型继承自基本模型。我真的需要在这里定义主干吗?
我正在寻找最佳实践,谢谢!
我总是定义一个模块运行所需要的一切。如果你不这样做,它就不是便携式的。如果您在将来删除了上游依赖项,那么您的下游模型也可能会中断。例如,
define('a', ['app','backbone','myplugin', ...]
define('b', ['app','backbone','a', ...]
如果b
和a
都使用myplugin
,那么在将来的某个时候a
不再需要它,当你从a
中删除myplugin
时,你将在不知情的情况下破坏b
。
如果你有一堆some-other-models
,我建议把它们放在你的require.js配置文件中,像这样:
require.config({
paths: {
'backbone': 'path/to/backbone'
},
shim: {
'models/*': { deps: [ 'backbone' ] }
}
});
然后你就可以为你的some-other-model
声明深度,因为backbone
已经存在了:
define(['app', 'models/base/model'], function (App, BaseModel) {
// backbone is already loaded here
});
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- WebResources嵌入式资源和Javascript如何在另一个嵌入式资源中使用它们
- 如何在构建node-webkit应用程序后获取外部资源
- ADF:有条件地加载javascript资源
- Javascript嵌入式图像资源
- 内容安全策略:页面's设置阻止加载资源
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 用于查询错误转换的角度资源返回列表
- 未能在Laravel中加载资源
- LINK rel=子资源用于什么
- 如何在JS文件中获取资源(.resx)字符串
- 当使用控制器作为语法时,如何从父指令继承属性
- 以jquery方式继承Javascript
- 我可以在Nodewebkit中保护javascript以外的资源吗
- JavaScript对象不是从原型链继承的
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- 使用Object.create()的角度服务继承
- js文件未加载js控制台say's”;不允许加载本地资源”;
- 使用RequireJS:我应该定义继承的资源吗?