我是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>
答案 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>
...不推荐,有更好的选择。