我有几个主干覆盖,例如
Backbone.Model.prototype.validate = function(data) {...}
在我的项目中运行良好。我想将它们导出到一个新文件中,以便其他项目在需要时使用它们。我不确定该怎么做,也不确定是否应该将它们包装在定义中。
有关如何执行此操作的任何帮助?
我有几个主干覆盖,例如
Backbone.Model.prototype.validate = function(data) {...}
在我的项目中运行良好。我想将它们导出到一个新文件中,以便其他项目在需要时使用它们。我不确定该怎么做,也不确定是否应该将它们包装在定义中。
有关如何执行此操作的任何帮助?
我建议您查看UMD(通用模块定义)项目,该项目旨在为定义在浏览器以及大多数常见脚本加载器中工作的 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 以获得相同的注释版本。
假设您在文件 ( 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
})