Javascript “的意思是什么?”/有dom addeventlistener?:/aspect;依赖关系?

Javascript “的意思是什么?”/有dom addeventlistener?:/aspect;依赖关系?,javascript,dojo,requirejs,Javascript,Dojo,Requirejs,我正在一个项目中使用,它使用require.js加载脚本。 在中,它加载以下脚本: define(["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./sniff"], function(aspect, dojo, has){ 使用on.js时,我找不到错误: Uncaught Error: Missing: http://localhost:8585/dom-addeventlistener?:./aspect.js

我正在一个项目中使用,它使用require.js加载脚本。 在中,它加载以下脚本:

define(["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./sniff"], function(aspect, dojo, has){
使用on.js时,我找不到错误:

Uncaught Error: 
  Missing: http://localhost:8585/dom-addeventlistener?:./aspect.js
我想知道
/有什么功能!dom addeventlistener?:。/aspect
符号的作用是什么,如果我删除它,潜在的影响可能是什么。当我只做
/aspect
时,它似乎可以工作


谢谢

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

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

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

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>.";
        }
    }
);

重要的一点:
dojo/has!touch?dojo/touch:dojo/mouse
这里发生的是,加载
dojo/has
模块并检查
touch
(如果您有一个支持触摸的设备),如果测试正常并且找到了,则加载
dojo/touch
。如果没有,它将加载dojo/鼠标

在您的情况下:
/has!dom addeventlistener?:./aspect“
dojo/has
测试dom的addeventlistener方法的可用性。如果发现它不加载任何内容,因为
之间的部分被忽略。如果找不到它,则加载
dojo/aspect

如果一个模块也可以在服务器端运行,而在浏览器中没有类似DOM的模块,那么这样的代码通常会被使用。也就是说,如果您只在浏览器中运行,那么您可以安全地忽略整个需求,因为每个体面的浏览器都支持addEventListener

也就是说,您得到的错误是,
dojo/has
相对模块路径无法正确加载。在加载
/aspect
时,它也应该失败,但事实并非如此,这很奇怪。请确保
dojo/has
可用,因为删除需求是一种变通方法,而不是解决实际问题的方法。

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>.";
        }
    }
);