我正在使用具有声明标记的Dijit菜单栏。
菜单项包含链接('a'):
<li dojoType="dijit.MenuItem" id="i_car_new">
<a href="/RooTest/cars?form">Create new Car</a>
</li>
菜单呈现正确,甚至链接也显示为链接,但是当单击菜单中的此链接时,会发生注意。 (我的实际解决方法是使用'window.location'添加'onClick'事件。)
但我希望链接像普通用户一样工作(用户点击,浏览请求新页面)。我的期望是错的吗?我必须改变什么,链接有效吗?
来自html.file的相关部分
<html>
<head>
...
<script type="text/javascript">var djConfig = {parseOnLoad: true, isDebug: false};</script>
<script type="text/javascript" src="/RooTest/resources/dojo/dojo.js"></script>
<script type="text/javascript" src="/RooTest/resources/spring/Spring.js"></script>
<script type="text/javascript" src="/RooTest/resources/spring/Spring-Dojo.js"></script>
<script type="text/javascript" language="JavaScript">dojo.require("dojo.parser");</script>
</head>
<body class="tundra spring">
<div version="2.0" id="menu" dojoType="dijit.MenuBar">
<script type="text/javascript">
dojo.require("dijit.MenuBar");
dojo.require("dijit.PopupMenuBarItem");
dojo.require("dijit.Menu");
dojo.require("dijit.MenuItem");
dojo.require("dijit.PopupMenuItem");
</script>
<ul id="_menu">
<li dojoType="dijit.PopupMenuBarItem" id="c_car">
<h2>Car</h2>
<ul dojoType="dijit.Menu">
<li dojoType="dijit.MenuItem" id="i_car_new">
<a href="/RooTest/cars?form">Create new Car</a>
</li>
<li dojoType="dijit.MenuItem" id="i_car_list"
<a href="/RooTest/cars">List all Cars</a>
</li>
</ul>
</li>
</ul>
</div>
<div id="main">...</div></body></html>
答案 0 :(得分:1)
单击时不离开页面的原因是因为MenuItem在单击时调用dojo.stopEvent - 请参阅http://trac.dojotoolkit.org/browser/dojo/tags/release-1.6.1/dijit/MenuItem.js#L92上的_onClick()
如果你想要做很多这样的话,我很想用类似的东西来扩展MenuItem(旧的语法,我还没有转向新的AMD做事方式,而且未经测试):
dojo.provide('dijit.anchorMenuItem');
dojo.require('dijit.MenuItem');
dojo.declare('dijit.anchorMenuItem', dijit.MenuItem, {
_onClick: function(evt) {
this.getParent().onItemClick(this, evt);
}
});
然后在需要简单链接时使用它代替默认的MenuItem。否则,按照你的说法,在onClick处理程序上添加对window.location
的调用,但我认为这个内容更整洁。
答案 1 :(得分:0)
在dojo 1.7中,我尝试过:
dojo.provide('dijit.anchorMenuItem');
dojo.declare('dijit.anchorMenuItem', dijit.MenuItem, {
_onClick: function(evt) {
this.getParent().onItemClick(this, evt);
}
});
...点击顶级MenuItem时没有触发
我试过了:
dojo.connect(window.location,"onclick"...
......那没用。
仅供参考,这是有效的(对我而言 - 不是专家):
dojo.connect(window,"onmouseup",function(_evt) {
var _wdg = dijit.getEnclosingWidget(_evt.target)
if (_wdg && _wdg.baseClass && _wdg.baseClass == "dijitMenuItem" && _wdg.onItemClick) {
_wdg.onItemClick(_evt)
}
}
)