我有幾個骨幹overrites如創建骨幹插件(餐飲爲AMD/Require.js)
Backbone.Model.prototype.validate = function(data) {...}
了在我的項目運作良好。我想將它們導出到一個新文件中,以便在需要時可以被其他項目使用。我不知道如何去做這件事,我不確定我是否應該在定義中包裝它們。
如何做到這一點的任何幫助?
我有幾個骨幹overrites如創建骨幹插件(餐飲爲AMD/Require.js)
Backbone.Model.prototype.validate = function(data) {...}
了在我的項目運作良好。我想將它們導出到一個新文件中,以便在需要時可以被其他項目使用。我不知道如何去做這件事,我不確定我是否應該在定義中包裝它們。
如何做到這一點的任何幫助?
我建議你看看UMD (Universal Module Definition) project,其目的是提供定義在瀏覽器以及大多數通用腳本加載器中工作的JavaScript模塊的約定。
爲了支持RequireJS(AMD)以及瀏覽器全局變量,您可能需要特別關注UMD的AMD/web語法。
這裏是一個主鏈依賴性介體模塊,其具有或不具有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
})
使用原型的目的是讓我不必在每個模型中創建驗證函數。我可以設置一次,就是這樣。 – Xerri
是的,你是對的,在我的例子中它是一樣的,'驗證'也在原型上定義:) – julesbou