2016-02-02 45 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可用,因爲刪除要求是一種解決方法,而不是解決您的實際問題。