我的网站上有旧版 JavaScript,它使用 Sizzle 作为选择器引擎。
我最近添加了 dojo 库(v 1.8)用于可视化目的(图表等)。因为 dojo 包含选择器(dojo/select),所以我认为 Sizzle 现在是多余的,我可以用 dojo/select 替换它。有没有办法让 dojo/select 与非 AMD 代码一起工作?
最佳答案
Brandon Boone的答案非常有用,因此您不必重写选择器字符串。我想你问的是如何导出dojo/query
进入全局命名空间,即通过 AMD 的异步特性进入 window
对象。有两种选择:
如果您使用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/
如果您使用无基础的 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/