2016-06-10 126 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版本。

相關問題