Im bắt đầu để loại quấn quanh đầu tôi requirejs và cấu trúc Dojo AMD mới, nhưng tôi có một vấn đề với một số xét nghiệm sớm:Tại sao cú pháp đơn giản hóa CommonJS Wrapper không hoạt động trên mô-đun Dojo AMD của tôi?
cg/signup.js:
define(['dojo/_base/fx', 'dojo/dom'], function(fx, dom){
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
này hoạt động tốt. Trong tệp cg.js chính:
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(Signup){
var sp = new Signup();
sp.hidePreloader('preloader')
})
Bam. Làm xong. Tuy nhiên, trong việc sử dụng cấu trúc giản CommonJS Wrapper:
define(function(require){
var fx = require('dojo/_base/fx'),
dom = require('dojo/dom');
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
tôi nhận được một lỗi undefinedModule. Nó dường như đến từ dòng dojo/_base/fx
, nhưng tôi không biết tại sao.
CẬP NHẬT
Để làm rõ.
index.html script
<script type="text/javascript" src="js/dojo/dojo.js.uncompressed.js" data-dojo-config="isDebug:true,async:true"></script>
<script type="text/javascript" src="js/cg.js"></script>
cg.js
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(signup){
signup.testFunc()
})
js/cg/signup.js
define(['require', 'exports'], function(require, exports){
var dom = require('dojo/_base/kernel');
// Any other require() declarations (with very very few exceptions like 'dojo/_base/array throw undefinedModule errors!!!
// without any error causing requires, this works fine.
exports.testFunc = function(){
alert("hello")
}
})
Hmm, một biến thể hơi khác nhau dường như làm việc trên JSFiddle. (Nhưng tôi không thể liên kết với nó ngay bây giờ vì JSFiddle đang ở chế độ chỉ đọc.) Bạn có thể cung cấp thêm chi tiết về lỗi chính xác không? – Domenic
Đó là lỗi chính xác. Bằng cách sử dụng kỹ thuật đơn giản hóa CommonJS Wrapper với cùng một đường dẫn và cùng một câu lệnh require, giao diện điều khiển sẽ in ra một lỗi 'undefinedModule'. Tôi có 'isDebug = true' trong tập lệnh cấu hình và' debugAtAllCosts' không ném thêm gì nữa. Biến thể hoạt động cho bạn là gì? – Phix
Tôi không thể tách thành nhiều tệp trên JSFiddle vì vậy tôi đã thử 'define (" foo ", function (require) {...})' trong đó '...' chứa các câu lệnh require của bạn, cộng với 'console.log' s cho các đối tượng 'fx' và' dom'. Hai đối tượng điên rồ đã đăng nhập vào giao diện điều khiển ... Dojo 1.7.1? – Domenic