2017-03-01 27 views
0

我嘗試使用RequireJS和AMD模塊定義,並寫了一個模塊,以我認爲的對象格式執行我的任務。 (我從jQuery的去了,還沒有研究了OOP的JavaScript井)我如何可以有requirejs多個模塊實例

myModule.js

define([ 
    jquery, 
    datepicker, 
], function ($, datepicker) { 
    var myModule = { 
     debug: true, 
     lang: 'auto', 

     initModule: function (element) { 
      myModule.element = element; 
     }, 

     // ... other methods 
    } 

    return myModule; 
}); 

而且它工作得很好,但如果我嘗試使用它的多個元素/時間它覆蓋他自己,我不能在同一頁面多次使用它。

main.js

requirejs(['MyModule'], 
    function (MyModule) { 

     // all the elements on page 
     $elements = $('.element'); 

     $elements.each(function() { 
      MyModule.initModule($(this)); 
     }); 
}); 

當我有頁面上有多個<div class="element">只有最後一個工作,我想因爲我的模塊覆蓋了他的自我。

我試圖添加new MyModule(),但有一個錯誤TypeError: MyModule is not a constructor

我想我需要添加一個構造函數或別的東西,在任何情況下有我的模塊的實例,而不是使用對象(即我認爲是由requirejs預編譯並返回準備工作)。任何幫助都很好,非常感謝提前!

回答

0

好的!爲了做到這一點!我完全重構我的代碼,而是在我的模塊定義返回一個對象我的原型,他實例後獲得的功能,我創建一個構造函數用於重置屬性/瓦爾:

myModule.js

define([ 
    jquery, 
    datepicker, 
], function ($, datepicker) { 
    // constructor 
    var myModule = function() { 
     // reset lang because it maybe was changed in previous instance, 
     // i think because javascript share this thing trough objects? 
     myModule.prototype.lang = 'auto'; 
    } 

    myModule.prototype.debug = true 
    myModule.prototype.lang = 'auto'; 

    myModule.prototype.initModule = function (element) { 
     myModule.element = element; 
    }; 

    // ... other methods with `myModule.prototype.` prefix 


    return myModule; 
}); 

太好了,現在我可以調用myModule低谷new myModuel()的語法,併爲頁面上的不同元素具有相同的功能。

main.js

requirejs(['MyModule'], 
    function (MyModule) { 

     // all the elements on page 
     $elements = $('.element'); 

     var p = 1, _mod = []; 
     $elements.each(function() { 
      _mod[p] = new MyModule(); 

      _mod[p].initModule($(this)); 
      p++; 
     }); 
}); 

這對我的工作,我沒有完全理解但我做什麼,但我的目的是satisfated,我可以對頁面上的不同elemnts重用同一模塊的功能。

建議我閱讀:? 我需要安全地閱讀關於OOP Javascript,prototype以及javascript如何管理內存和命名空間中的實例/類/對象/ var的內容。

相關問題