當使用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