2013-07-14 35 views
2

我開始學習javascript/jQuery並希望使用RequireJS。以下是我的文件層次:通過RequireJS加載本地jQuery,jQuery UI和其他文件

my_project/ 
├── index.php 
└── scripts/ 
    ├── require.js 
    ├── loader.js 
    ├── app/ 
    │ ├── app.js // this is where I'd like to write functions for the app 
    │ └── helper/ // this folder is empty for now 
    └── lib/ 
     ├── jquery/ 
     │ └── 1.10.2/ 
     │  └── jquery.min.js 
     └── jqueryui/ 
      └── 1.10.3/ 
       └── jquery-ui.min.js 

我通過與此相關的RequireJS文檔和StackOverflow的職位(example)讀取和設置RequireJS CONFIGS是像這個 -

my_project/index.php,我有

<script data-main="scripts/loader.js" src="scripts/require.js"></script> 

scripts/loader.js,我有

requirejs.config({ 
    baseUrl: 'scripts/lib', 

    enforceDefine: true, 

    paths: { 
     "app": '../app', // mapping for my 'scripts/app/' directory 
     "jquery": [ 
      'jquery/1.10.2/jquery.min', 
      //'//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', this works 
       ], 
     "jquery-ui": [ 
      'jqueryui/1.10.3/jquery-ui.min', 
      //'//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min', this works 
       ], 
}, 

    shim: { 
     "jquery-ui": { 
      exports: "$", 
      deps: ["jquery"], 
     }, 
    }, 
}); 

scripts/app/app.js,我有

define(['jquery-ui'], function() { 
    .... // some js code here 
} 

每當我測試index.php,我看到(在Firebug控制檯)Error: No define call for loaderError: No define call for jqueryError: Load timeout for modules: jquery-ui。我可以通過將本地jQuery和jQueryUI庫與基於CDN的CDN(如上面顯示爲註釋)一樣,消除最後兩個錯誤。

我想知道如何從本地文件加載jQuery和jQueryUI的沒有得到Error: No define call for jqueryError: Load timeout for modules: jquery-ui

對不起,如果這是一個很長的職位。正如我上面提到的,我仍然在學習JavaScript,並且盡我所能保持我的代碼清潔。如果有經驗的編碼人員可以幫助我回答上述任何問題,我將非常感謝他們的幫助。謝謝。

回答

1

在你的define調用中,你需要給任何加載的JavaScript一個名字。您已經完成了jQueryUI的刷新,因此您不需要在PHP文件中再次定義它。

從您的define語句中刪除jquery-ui並將其保留爲空。如果您有其他JavaScript文件要加載(假設例如session.js)你會說

define(['app/session'], function (session) { 

要加載它,然後使用session.whatever()來引用它。

下一頁 - 上下的jQuery -

你似乎已經更名爲您的jQuery的文件,並改變了它的命名約定。默認情況下,jQuery將被命名爲jQuery-1.9.2.min.js或其他東西,但在你的例子中,你已經在lib/jQuery/1.9.2/jQuery.min.js下。我建議刪除所有已編輯的jQuery文件,並在lib下讀取它,然後將您的require.js配置設置爲默認方式。不要試圖重新發明你爲什麼要學習新技術!

參見設置信息的文檔

http://requirejs.org/docs/jquery.html

+0

謝謝@kadumel。我想在閱讀了你給我的文檔後我發現了這個問題。但我面臨一個新的問題,這是問這裏:http://stackoverflow.com/questions/17636642/referenceerror-jquery-is-not-defined-requiredjs-when-loading-from-local-jquery 我會就像你有時間看看它,並幫助我找出它爲什麼會導致錯誤。再次感謝! – user1330974

+0

當你沒有得到答案時,你會在這裏得到更好的幫助,然後回來稍微改變它並回答自己的問題,只是FYI –

+0

如果你對我改變問題感到不安,我很抱歉。我沒有得到答案後更新了原文(有三個問題),因爲我怕人們跳過它,因爲它太長而且太多。我的編輯沒有發佈你的答案。我回答我的問題,承認我犯了一個錯誤(不包括'requirejs([「app/app」]);'),這就是上述問題的解決辦法。但是,我也一定會給你信貸指導我正確的資源。對於誤會感到抱歉。希望你繼續爲StackOverflow上的其他人提供幫助 – user1330974

0

原來我得到那些裝載機錯誤,因爲我在scripts/loader.js錯過

requirejs(["app/app"]); 

。這使得所有三個錯誤消失。

希望這個問題,當面對另一個初學者要求像我這樣的JS時,將很容易克服。

此外,請參閱this,thisthis in general,如果您想直接從requireJS文檔中瞭解更多信息,請參閱上面的@kadumel建議。