代码之家  ›  专栏  ›  技术社区  ›  Sionnach733

依赖项中“./has!dom addeventlistener?:./aspect”的含义是什么?

  •  1
  • Sionnach733  · 技术社区  · 10 年前

    我正在使用 dojo toolkit 在项目中使用require。js来加载脚本。 在里面 on.js ,它加载以下脚本:

    define(["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./sniff"], function(aspect, dojo, has){
    

    当使用on.js时,我得到not found错误:

    Uncaught Error: 
      Missing: http://localhost:8585/dom-addeventlistener?:./aspect.js
    

    我想知道 ./has!dom-addeventlistener?:./aspect 如果我把它去掉,潜在的影响会是什么。当我刚做的时候,它似乎很管用 ./aspect 相反

    谢谢

    1 回复  |  直到 10 年前
        1
  •  2
  •   iH8    10 年前

    当使用 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 这里发生的是 道场/哈斯 模块已加载并检查 touch (如果你有一个可触摸的设备),如果测试正常并且找到了它,它就是负载 dojo/touch 。如果没有,则加载 dojo/mouse .

    在您的情况下: ./has!dom-addeventlistener?:./aspect" , 道场/哈斯 测试DOM的addEventListener方法的可用性。如果它被发现,它不会加载任何内容,因为 ? : 被忽略。如果找不到,它会加载 dojo/aspect .

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

    也就是说,你得到的错误是 道场/哈斯 无法正确加载相关模块路径。加载时也应失败 ./aspect 但这并不奇怪。确保 道场/哈斯 是可用的,因为删除需求是一种变通方法,而不是实际问题的解决方案。