Dojo 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 /只检测到某些dojo功能。如果是这种情况,是否有另一种方法可以在尝试要求之前检测自定义模块是否存在,然后在其小部件中实例化它?
答案 0 :(得分:1)
是的,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
版本一样。