尝试使用dojo动态导航到新页面

时间:2013-03-12 04:00:13

标签: dojo

我是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>

1 个答案:

答案 0 :(得分: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>

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