我無法使用shim配置命令非AMD模塊。requirejs jquery jquery-ui和jqGrid等多重依賴非模塊jQuery插件
我的墊片配置是這樣的。即使我想使用require-jquery.js,但仍然有兩個非AMD模塊是jquery ui和jqGrid。 jqGrid本身有幾個插件,只有在jqGrid加載完成後才能加載。
requireconfig.js
require.config({
baseUrl: '../jsp',
paths: {
app: '../js/app',
jquerygrid: 'http://view.jqueryui.com/grid',
lib: '../js/lib',
plugins: '../js/plugins',
jquery: '../js/lib/jquery-1.9.1',
jqueryui: [ 'http://ajax.googleapis.com/ajax/libs/jqueryui/'+
'1.9.2/jquery-ui'],
canjs: 'http://canjs.us/release/latest/can.view.mustache',
uigrid:'../js/plugins/mydataview',
jqgrid: '../js/plugins/grid.locale-en'
},
shim: {
jqueryui: {
exports: "$",
deps: ['jquery']
},
uigrid: {
deps:[
'jqueryui',
'http://view.jqueryui.com/grid/ui/jquery.ui.dataview.js',
'http://view.jqueryui.com/grid/ui/jquery.ui.grid.js',
'http://view.jqueryui.com/grid/ui/jquery.ui.observable.js',
'http://view.jqueryui.com/grid/ui/jquery.ui.dataviewlocal.js',
'http://view.jqueryui.com/grid/grid-spf/pager.js',
'http://view.jqueryui.com/grid/grid-editing/grid.selectable.js',
'http://view.jqueryui.com/grid/grid-editing/navigator.js',
'http://view.jqueryui.com/grid/grid-editing/localstore.js',
'http://view.jqueryui.com/grid/grid-editing/helpers.js',
'http://view.jqueryui.com/grid/external/jquery.tmpl.js',
'http://view.jqueryui.com/grid/grid-spf/grid-filter.js',
'http://view.jqueryui.com/grid/grid-spf/grid-sort.js'
]
},
canjs:{
deps: ['jquery','http://canjs.us/release/1.1.4/can.jquery.js']
},
jqgrid:['jqueryui','../js/plugins/jquery.jqGrid.src.js']
}
});
而且我的呼喚HTML是
<script type="text/javascript" src="../js/require.js"></script>
<script type="text/javascript" src="../js/requireconfig.js"></script>
<script type="text/javascript">
require(['jqgrid'], function($){
$("#mygrid").jqGrid({
pager: "#mygridpager"
})
});
</script>
在不同的運行我得到不同的錯誤:
有時:
未捕獲的ReferenceError: jQuery沒有定義..... jquery.jqGrid.src.js:3589
當然這並不會導致錯誤。但它看起來像一些黑客,因爲requirejs不支持順序。嵌套的需求調用也不太優雅。可能是如果有一個requirejs被延遲,如when()。那麼()像鏈可以使它看起來更好。
<script type="text/javascript">
require(['jquery'], function(){
require(['jqgrid'], function(){
$("#mygrid").jqGrid({
pager: "#mygridpager"
});
});
});
</script>
是的,我明白了你的觀點。它的工作原理,但我有另一個疑問,因爲* gridlocale *也依賴於jqgrid。 gridlocale開始'$ .jgrid = $ .jgrid || {}; $ .extend($。jgrid,{'。理想情況下我相信'require(['jquery','jqgridlocale'])需要用來獲取所有的依賴關係。 –