我有几个主干的重写,如
Backbone.Model.prototype.validate = function(data) {...}
在我的项目中运作良好。我想将它们导出到一个新文件中,以便在需要时可以被其他项目使用。我不知道如何解决这个问题,我不确定是否应将它们包装在define中。
有关如何执行此操作的任何帮助?
答案 0 :(得分:1)
我建议你看一下UMD (Universal Module Definition) project,它旨在提供用于定义在浏览器以及大多数常见脚本加载器中工作的javascript模块的约定。
为了支持RequireJS(AMD)以及浏览器全局变量,您可能希望特别注意UMD的AMD/web语法。
以下是依赖于Backbone的介体模块的示例,该模块可以使用或不使用RequireJS:
(function (root, factory) { return typeof define === 'function' && define.amd ? define(['backbone'], factory) : (root.mediator = factory(root.Backbone)); }(this,
function (Backbone) {
var events = Backbone.Events;
/**
* Mediator provides a decoupled communication mechanism.
* Borrows the implementation from Backbone.
*/
return {
//expose the on/off/trigger for native Backbone listenTo/stopListening support.
on: events.on,
off: events.off,
trigger: events.trigger,
//expose subscribe/unsubsribe/publish aliases for idiomatic mediator pattern interface
subscribe: events.on,
unsubscribe: events.off,
publish: events.trigger
};
}));
我通常将模块声明压缩到如上所述的单行代码,但请参阅UMD的AMD / web-sample以获得相同的注释版本。
答案 1 :(得分:0)
假设您拥有文件中所有模型的所有角色(libs/validation/rules
)。
如果您已经使用了require.js:
// model/user.js
define([
'libs/validation/rules'
], function(ValidationRules) {
return Backbone.Model.extend({
validate: Validation.User
})
})
否则,您可以使用全局对象导出验证规则(不好的主意,但它有效):
// model/user.js
Backbone.Model.extend({
validate: window.Validation.User
})