2016-06-07 108 views
0

在當前的項目中,我需要使用RequireJS以及動態包含模塊與靜態包含的JavaScripts一樣。Requirejs靜態包含腳本回調沒有得到執行

每個頁面都需要包含靜態腳本,並在開發過程結束時進行concardinated。這些例如jQuery jQueryUi和一些更多的腳本,如自動建議腳本。

動態部分僅用於某些頁面,如配置程序,其中需要一個額外的腳本,以便在每個頁面上加載大量腳本。這就是爲什麼此腳本作爲模塊加載到需要的頁面上的原因。

雖然jQuery和jQueryUI的玩好的,可作爲AMD模塊由於該如何工廠方法被執行:

(function(t){ 
    "function"==typeof define&&define.amd?define('jquery-ui',["jquery"],t):t(jQuery) 
})(function(t){...}); 

這不是自動提示部分屬實。雖然我添加了完全相同的功能模式:

(function(t){ 
    "function"==typeof define&&define.amd?define('suggest',['jquery','jquery-ui'],t):t(jQuery) 
})(function(t){ 
    console.log('yeah'); 
}); 

工廠內部的yeah部分沒有得到執行。

我在想什麼?還有什麼需要讓它工作?

回答

0

從RequireJS文檔(http://requirejs.org/docs/api.html):由 調用定義定義

理想情況下,加載腳本將模塊()。但是,您可能需要使用某些傳統/傳統 「瀏覽器全局」腳本,這些腳本不通過 definition()表示它們的依賴關係。對於那些,你可以使用shim配置。正確表達 其依賴關係。

您可以嘗試使用類似:

requirejs.config({ 
    ... 
    shim: { 
     'suggest': { 
      deps: ['jquery', 'jquery-ui'], 
      exports: 'suggest' 
     } 
    } 
    ... 
} 

您可能需要添加suggetpaths財產了。

+0

我應該強調的是autosuggest文件也有一個完全定義的塊依賴。 所以它不是一個普通的js文件,而是一個amd兼容的結構化文件,它通過腳本標籤被包含。 如果我沒有完全錯誤,只需要簡單的js文件就可以使用墊片。在這種情況下,我想我不需要將此添加到配置。 –

+0

你可以顯示'autosuggest'文件嗎?如果我能看看模塊定義,我可能會更好地幫助你。 –

+0

用建議文件創建一個要點。如果您需要更多詳細信息,請告訴我。 https://gist.github.com/garbast/9af7782e71507fda37d6bb637de5ca9c –