2016-02-02 16 views
1

我在项目中使用dojo toolkit,它使用require.js加载脚本。 在on.js,它加载以下脚本:“./has!dom-addeventlistener?:./aspect”在依赖项中的含义是什么?

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而不是。

谢谢!

回答

2

当使用dojo/has模块,因为它的行为就像一个三元运算插件:

The conditional (ternary) operator is the only JavaScript operator that takes three operands. This operator is frequently used as a shortcut for the if statement.

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的服务器端运行,那么通常会使用类似代码。 I'de说,如果你在浏览器中运行的只有你可以放心地忽略全部要求,因为每一个体面的浏览器支持addEventListener

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