Giả sử tôi muốn sử dụng jquery cùng với một plugin jquery tiêu chuẩn, không được kích hoạt chuẩn đã được xác định bằng cách sử dụng đóng tiêu chuẩn: (function($))($.fn.myplugin = { ... })(jQuery);
và tất cả đều nằm bên trong một số js/libs/jquery/jquery.myplugin.js
.Cách đúng để tải các plugin jQuery tương thích không phải của AMD trong require.js bằng jQuery ở chế độ noConflict?
tôi sử dụng cấu hình này:
require.config({
baseUrl: 'js/',
paths: {
'jquery': 'libs/jquery/jquery-noconflict',
'underscore': 'libs/underscore/underscore',
'backbone': 'libs/backbone/backbone',
'jquery-myplugin': 'libs/jquery/jquery.myplugin'
},
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'jquery-myplugin': {
deps: ['jquery']
}
});
tôi tải jQuery trong không mâu thuẫn chế độ trong libs/jquery/jquery-noconflict.js
, becase Tôi không muốn làm ô nhiễm không gian tên toàn cầu:
define(['libs/jquery'], function() {
return jQuery.noConflict(true);
});
và đây là cách tôi tải app.js chính của tôi:
define([
'jquery',
'underscore',
'backbone',
'jquery-myplugin'],
function($, _, Backbone, MyPlugin){
//MyPlugin is always undefined, not even sure if
//I should be passing it here if it only extends jQuery?
});
Bây giờ, đây là vấn đề tôi đang gặp - trong khi tôi có thể tất cả các thư viện được định nghĩa ở trên mà không có bất kỳ vấn đề gì, tôi không thể tìm ra cấu hình shim
chính xác để tải các plugin jquery không được kích hoạt AMD.
Tôi đã cố gắng thiết lập jquery-myplugin
là deps
của số jquery
(và cách khác) nhưng tôi không bao giờ làm việc được.
Nó có vẻ như tôi đang gặp vấn đề với các tình huống sau:
- jQuery tải trong không mâu thuẫn chế độ.
- chạy mã plugin, mở rộng phiên bản của jQuery ở trên
- Tôi có thể sử dụng $ trong ứng dụng của mình, được mở rộng bằng mã plugin, vì vậy $ .myplugin có sẵn.
Tôi đã thấy câu hỏi tương tự nổi xung quanh nhưng không ai trong số họ thực sự giải quyết vấn đề này chỉ đưa ra gợi ý mơ hồ như "sử dụng shim config" ...
Sửa
Tôi cũng đã cố gắng sử dụng
"jquery-myplugin": {
deps: ["jquery"],
exports: "jQuery.fn.myplugin"
}
Và trong khi các phương thức plugin có sẵn khi được nạp dưới dạng mô-đun AMD theo cách này, tôi vẫn không thể truy cập: $('.class').myplugin()
as de lỗi $ đối tượng đã không được mở rộng với mã myplugin.
Bạn vẫn gặp sự cố với điều này? – Louis
phụ thuộc mô-đun phải được thể hiện trong một mảng: 'define (['dep1', 'dep2' ... 'depn'], hàm (dep1, dep2, ... depn) {});' như được mô tả [ở đây] (http://requirejs.org/docs/errors.html#requireargs) – Vikram
bắt tốt, nhưng đó chỉ là nhầm lẫn của tôi trên stackoverflow, vấn đề cơ bản vẫn còn đó – rochal