当使用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
可用,因为删除要求是一种解决方法,而不是解决您的实际问题。
来源
2016-02-02 11:23:52
iH8