2016-06-10 122 views
0

道场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(); 
    }); 
}); 

但是似乎道场/只检测到某些道场功能。如果是这种情况,是否有另一种方法来检测自定义模块是否存在,然后尝试请求,然后实例化它,如果它的一个小部件?

回答

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版本。

相关问题