javascript - 在非 AMD 代码上使用 dojo/select

标签 javascript jquery-selectors dojo amd sizzle

我的网站上有旧版 JavaScript,它使用 Sizzle 作为选择器引擎。

我最近添加了 dojo 库(v 1.8)用于可视化目的(图表等)。因为 dojo 包含选择器(dojo/select),所以我认为 Sizzle 现在是多余的,我可以用 dojo/select 替换它。有没有办法让 dojo/select 与非 AMD 代码一起工作?

最佳答案

Brandon Boone的答案非常有用,因此您不必重写选择器字符串。我想你问的是如何导出dojo/query进入全局命名空间,即通过 AMD 的异步特性进入 window 对象。有两种选择:

  1. 如果您使用release版本,它已经将dojo/query打包在dojo.js中,因此您不必关心异步执行模块工厂函数,只需导出变量:

    <script 
        src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/dojo.js"
        data-dojo-config="async:true"
    ></script>
    
    <script>
        // export query module to global namespace (window object)
        require(["dojo/query"], function(query) {
            window.query = query;        
        });
    </script>
    
    <script>
        // query function is now available globally
        console.log(query("li"));
    </script>
    

    在 jsFiddle 上查看此示例:http://jsfiddle.net/phusick/gvnGu/

  2. 如果您使用无基础的 dojo,则会更加棘手,因为您实际上必须等待 dojo/query 加载:

    <script src="dtk-sdk/dojo/dojo.js" data-dojo-config="async:true"></script>
    
    <script>
        // wrap your lecacy code into a function so it's not executed immediately
        var executeNonAmdCode = function() {
            console.log(query("li"));
        }
    </script>
    
    <script>
        require(["dojo/query"], function(query) {
            // export query module to global namespace (window object)
            window.query = query;
            // execute the legacy code
            executeNonAmdCode();
        });
    </script>
    

关于javascript - 在非 AMD 代码上使用 dojo/select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485237/

相关文章:

javascript - while 循环多个条件时不检查两个条件

jquery-selectors - jQuery 将 H2 中的 div 包裹到最后一段

jquery - 根据其后的元素选择一个元素

Javascript form.submit() 在 Firefox 中不工作

javascript - 检测音频是否会在桌面浏览器上播放

javascript - 选择2 : swapping between text and value in multiple select2

javascript - es6如何导入已经在另一个js包中定义的

jquery - 在 JSON 对象上使用 jQuery 的 find()

javascript - 在特定范围内调用 JavaScript 方法

javascript - 我可以禁用 dgrid 中的排序以获得性能提升吗?