道场 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 功能。如果是这种情况,是否有另一种方法可以在尝试要求之前检测自定义模块是否存在,然后实例化它(如果它是小部件)?
最佳答案
是的,dojo/has只检测某些 dojo 功能。但你可以添加你自己的,我正在尝试像你在这里尝试的东西,也许不是最好的,但这对我有用。
在应用程序启动时,您可以将自己的功能添加到 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
库,扩展dojo
版本并添加您想要的所有功能。例如:
//myApp/has.js
define(["dojo/has"], function(has){
has.add('myApp', true);
return has;
});.
然后您可以在您的应用程序中包含 myApp/has
并使用它,就像它是 dojo
版本一样。
关于javascript - 有没有办法检测自定义模块是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37755721/