2013-05-30 44 views
1

我有幾個骨幹overrites如創建骨幹插件(餐飲爲AMD/Require.js)

Backbone.Model.prototype.validate = function(data) {...} 

了在我的項目運作良好。我想將它們導出到一個新文件中,以便在需要時可以被其他項目使用。我不知道如何去做這件事,我不確定我是否應該在定義中包裝它們。

如何做到這一點的任何幫助?

回答

1

我建議你看看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的相同版本的評論。

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 
}) 
+0

使用原型的目的是讓我不必在每個模型中創建驗證函數。我可以設置一次,就是這樣。 – Xerri

+0

是的,你是對的,在我的例子中它是一樣的,'驗證'也在原型上定義:) – julesbou