2012-12-18 30 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 
    }); 
    }); 

}); 
相关问题