2012-12-18 83 views
7

插件幾乎總是堅持在jQuery之前加載。而且他們不應該這樣做,因爲我使用了墊片設置。RequireJS不適用於Shim'ed jQuery插件

在我main.js我有以下設置:

requirejs.config({ 
    paths: { 
     'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min', 
     'bootstrap': '../bootstrap/js/bootstrap.min', 
     'select2': 'vendor/select2', 
     'jshashtable': 'vendor/jshashtable-2.1', 
     'jquery.numberformatter': 'vendor/jquery.numberformatter-1.2.3.min', 
     'jq-datepicker': 'vendor/bootstrap-datepicker', 
     'jq-datepicker.da': 'vendor/bootstrap-datepicker.da' 
    }, 

    // Use shim for plugins that does not support ADM 
    shim: { 
     'bootstrap': ['jquery'], 
     'select2': ['jquery'], 
     'jq-datepicker': ['jquery'], 
     'jshashtable': ['jquery'], 
     'jquery.numberformatter': ['jquery', 'jshashtable'] 
    }, 
    enforceDefine: true 
}); 

在這個文件中,我有以下之後:

// Start the main app logic. 
requirejs(['jquery', 'bootstrap', 'jq-datepicker'], 
function ($) { 

    console.log('Require.JS loaded'); 

    // Init datepickers 
    // Docs: https://github.com/eternicode/bootstrap-datepicker 
    $('.datepicker').datepicker({ 
     format: 'dd/mm/yyyy', 
     language: 'da', 
     keyboardNavigation: false, 
     autoclose: true 
    }); 

}); 

但我得到這個錯誤,所有的時間:

Uncaught TypeError: undefined is not a function bootstrap.min.js:6 
(anonymous function) bootstrap.min.js:6 
(anonymous function) 

我可以在我的Chrome網絡標籤中看到它在jQuery之前加載。

現在我試着添加enforceDefine: true之後,在這裏查看stackoverflow,但沒有運氣。我試着將requirejs.config移動到我的html頁面。我嘗試從本地文件加載jQuery。所有沒有運氣。

我錯過了什麼?

+0

我測試過的例子,並沒有看到任何問題:http://jsfiddle.net/asgoth/tHkHw /我刪除了enforceDefine和jq-datepicker.da(無法找到它) – asgoth

回答

5

你墊片的jQuery嗎?

shim: { 
    jQuery: { 
     exports: 'jquery' 
    }, 
    'bootstrap': { 
     exports : 'jquery' 
    }, 
    'select2': { 
     exports :'jquery' 
    }, 
    ... 
}, 
+0

是的,我也試過這個,但沒有運氣在所有,現在我只需在RequireJS之外加載jQuery –

+1

bootstrap:{'jQuery'], 個出口:'jQuery' }, –

+0

我修正了這個問題,但是前一段時間。你會得到接受,因爲在大多數情況下,這將是事實。而且你有最多的讚譽。 –

1

嘗試:

shim: { 
    'bootstrap': { 
     exports : 'jquery' 
    }, 
    'select2': { 
     exports :'jquery' 
    }, 
    ... 
}, 
+0

我已經嘗試過這一點,沒有工作:( –

+0

這對我來說無效:( –

2

是不是$要導出?

shim: { 
     'jquery': { 
      exports: '$' 
     }, 
     'jqueryuitouchpunch': { 
      deps: ['jqueryui'] 
     }, 
} 
0

只要確保你的插件之前加載了jQuery,利用定義:

// Start the main app logic. 
requirejs(['jquery', 'bootstrap'], function ($) { 
    define(['jq-datepicker'], function() { 
     $('.datepicker').datepicker({ 
      format: 'dd/mm/yyyy', 
      language: 'da', 
      keyboardNavigation: false, 
      autoclose: true 
    }); 
    }); 

}); 
相關問題