有没有办法检测自定义模块是否存在?
问题描述:
道场1.10+有没有办法检测自定义模块是否存在?
我希望有条件地加载自定义模块根据这个帖子
Dojo FAQ: How can I conditionally load AMD modules?
require([
'dojo/has'
], function (has) {
var ui;
var moduleId = 'myApp/ui/';
// Assume 'has' tests for mobile and tablet
// have been defined
if (has('mobile')) {
moduleId += 'Mobile';
}
else if (has('tablet')) {
moduleId += 'Tablet';
}
else {
moduleId += 'Desktop';
}
require([moduleId], function (UiModule) {
ui = new UiModule();
ui.placeAt(document.body);
ui.startup();
});
});
但是似乎道场/只检测到某些道场功能。如果是这种情况,是否有另一种方法来检测自定义模块是否存在,然后尝试请求,然后实例化它,如果它的一个小部件?
答
是的,dojo/has只检测某些dojo功能。但你可以添加你自己的,我正在尝试像你在这里尝试的东西,也许不是最好的,但这个工作对我来说。
在您的应用程序的启动时间,你可以添加你自己的特点来道场,即
var deviceWidth = has('device-width'), hasTouch = has('touch');
has.add('mobile', (hasTouch && deviceWidth <=736));
has.add('tablet', (hasTouch && (deviceWidth > 736 && deviceWidth <=1024)));
等,所以,后来在另一窗口小部件,您可以要求dojo/has
并使用新近添加的特性。或事件更好,你可以做到这一点
require(['dojo/has!mobile?myApp/ui/Mobile:myApp/ui/Tablet'], function (UiModule) {
ui = new UiModule();
ui.placeAt(document.body);
ui.startup();
});
我从来没有尝试嵌套dojo/has
验证,我不能告诉你,如果它的工作原理,但我已经试过像例子中,我给你和它的工作原理。
认为您可以在您的项目中拥有自己的has
lib,扩展dojo
版本并添加所需的所有功能。例如:
//myApp/has.js
define(["dojo/has"], function(has){
has.add('myApp', true);
return has;
});.
然后在您的应用程序后,你可以包括myApp/has
和我们来说,这就像如果它是在dojo
版本。