依赖关系中“./has!dom-addeventlistener?:./aspect”是什么意思

What is the meaning of "./has!dom-addeventlistener?:./aspect" in a dependency?

本文关键字:aspect 意思 是什么 关系 has 依赖 dom-addeventlistener      更新时间:2023-09-26

我正在一个项目中使用 dojo 工具包,它使用 require.js 来加载脚本。在 on.js 中,它会加载以下脚本:

define(["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./sniff"], function(aspect, dojo, has){

使用时.js我找不到错误:

Uncaught Error: 
  Missing: http://localhost:8585/dom-addeventlistener?:./aspect.js

我想知道./has!dom-addeventlistener?:./aspect符号有什么作用,如果我删除它可能会有什么潜在影响。当我只是做./aspect时,它似乎有效。

谢谢!

当使用 dojo/has 模块作为插件时,它的行为类似于三元运算符:

条件(三元(运算符是唯一采用三个操作数的 JavaScript 运算符。此运算符经常用作 if 语句的快捷方式。

condition ? expr1 : expr2 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

最好通过参考中的以下示例进行解释:

require(["dojo/has", "dojo/has!touch?dojo/touch:dojo/mouse", "dojo/dom", "dojo/domReady!"],
    function(has, hid, dom){
        if(has("touch")){
            dom.byId("output").innerHTML = 
                "You have a touch capable device and so I loaded <code>dojo/touch</code>.";
        } else {
            dom.byId("output").innerHTML =
                "You do not have a touch capable device and so I loaded <code>dojo/mouse</code>.";
        }
    }
);

https://dojotoolkit.org/reference-guide/1.10/dojo/has.html

重要的一点:dojo/has!touch?dojo/touch:dojo/mouse这里发生的事情是,加载dojo/has模块并检查touch(如果您有支持触摸的设备(,如果测试正常并且找到它,它会加载dojo/touch。如果不是,它会加载dojo/mouse.

在你的例子中:./has!dom-addeventlistener?:./aspect"dojo/has测试DOM的addEventListener方法的可用性。如果找到它,则不会加载任何内容,因为省略了?:之间的部分。如果未找到,则加载dojo/aspect .

如果模块也可以在没有像浏览器中那样的 DOM 的服务器端运行,则通常使用此类代码。我想说的是,如果您仅在浏览器中运行,则可以安全地省略整个要求,因为每个像样的浏览器都支持addEventListener

也就是说,您遇到的错误是无法正确加载dojo/has相对模块路径。加载./aspect时它也应该失败,但它没有,这很奇怪。确保dojo/has可用,因为删除要求是一种解决方法,而不是实际问题的解决方案。