2

我是 javascript 和 dojo 的新手,正在尝试编写代码以动态导航到另一个 URL。使用 javascript 似乎很容易做到这一点,但我无法让它与 dojo/on 一起使用。这是我的示例代码。微不足道的回调工作正常。dojo/on 回调调用回调,但新页面永远不会出现。我必须动态地使用 dojo 来执行此操作,因为我的项目需要它。任何人都知道为什么会失败以及如何使其工作?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js">
</script>
<script type="text/javascript">
callback = function() {
    window.location.href = "about:blank";
    console.debug("callback invoked"); 
}
function init() {
    var node = dojo.byId("test");
    var childNode = dojo.create("a", { href : "" }, node);
    childNode.innerText = "dojo callback click here"; 
    require(["dojo/on"], function(on){
        on(childNode, "click", callback);
    }); 
}
dojo.ready(init);
</script>
<div id="test">
    <p>
    <a href = "javascript:callback()">trivial callback click here</a>
</div>
4

1 回答 1

4

从 Dojo 1.7 开始,AMD 加载程序是使用 Dojo 模块的首选方式。

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js"></script>
    <script type="text/javascript">
    require(['dojo/on', 'dojo/dom', 'dojo/domReady!'], function(on, dom){
        on(dom.byId('theDiv'), 'click', function(){
            alert("Click!") // replace this line with location changes
        })
    })
    </script>
</head>
<body>
    <div id="test">
        <a href="javascript:void(0);" id="theDiv">Click Me</a>
    </div>
</body>
</html>

在此示例中,核心 Dojo.js 已加载(如您所要求),但不同之处在于我使用了 require 方法,将click方法附加dojo/on到 div。理想情况下,您将使用单独的 javascript 文件来指示页面的行为,但对于此示例,将 js 嵌入到索引页面中就足够了。

使用解析器,您可以使用声明<script type="dojo/on" data-dojo-event="click">...</script>式,但出于各种原因,您应该使用编程解析并使用 javascript 文件以获得最大效率。

此外,在全局范围内定义函数/方法/变量:

<script type="text/javascript">
callback = function() {
    window.location.href = "about:blank";
    console.debug("callback invoked"); 
}
</script>

...不推荐,有更好的选择。

于 2013-03-12T06:12:18.970 回答