javascript - 有没有办法检测自定义模块是否存在?

标签 javascript 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/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/

相关文章:

php - 获取表单数据并将其发送到浏览器中的新选项卡

javascript - window.setInterval() 的 dojo.hitch() 范围

javascript - Aurelia 显示每个输入的验证错误

javascript - 在 jQuery 中使用 .keyup 计算字符的简单方法

javascript - 停止无限 Javascript 循环

javascript - Angular JS 缺少指令所需的 Controller 错误 : Controller 'ngModel' , 找不到

javascript - img.onerror 似乎不适用于 IE8

javascript - 以编程方式在 BorderContainer 中创建的 AccordionContainer 存在大小问题

javascript - Dojo 对话框未加载样式

javascript - 配置 dgrid 单元格以显示数据的完整宽度