" ./的含义是什么?dom-addeventlistener?:./ aspect"在一个依赖?

时间:2016-02-02 10:40:54

标签: javascript dojo requirejs

我在项目中使用dojo toolkit,它使用require.js来加载脚本。 在on.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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

当使用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(如果你有一个支持触摸的设备),如果测试没问题,那么&{ #39; s发现,它加载dojo/touch。如果没有,则加载dojo/mouse

在您的情况下:./has!dom-addeventlistener?:./aspect"dojo/has测试DOM的addEventListener方法的可用性。如果发现它没有加载任何内容,因为?:之间的部分是无效的。如果未找到,则会加载dojo/aspect

如果模块也可以在浏览器中没有DOM的服务器端运行,则通常会使用这样的代码。我要说的是,如果你只在浏览器中运行,你可以安全地省略整个要求,因为每个体面的浏览器都支持addEventListener

也就是说,您所获得的错误是不能以某种方式dojo/has相对模块路径正确加载。加载./aspect时它也应该失败,但它并不奇怪。确保dojo/has可用,因为删除要求是一种解决方法,而不是解决您实际问题的方法。