Dijit菜单(酒吧)与链接 [英] Dijit Menu (bar) with link

查看:151
本文介绍了Dijit菜单(酒吧)与链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



菜单项包含链接('a'):

 < li dojoType =dijit.MenuItemid =i_car_new> 
< a href =/ RooTest / cars?form>创建新车< / a>
< / li>

菜单呈现正确,甚至链接显示为链接,但是当点击此链接在菜单中,注意到发生。 (我的实际解决方法是使用'window.location'添加'onClick'事件。



但是我希望链接工作正常(用户点击,浏览请求新页面)。我的期望是错的吗?我需要改变什么,链接是否正常工作?



html.file中的相关部分

 < HTML> 
< head>
...
< script type =text / javascript> var djConfig = {parseOnLoad:true,isDebug:false};< / script>
< script type =text / javascriptsrc =/ RooTest / resources / dojo / dojo.js>< / script>
< script type =text / javascriptsrc =/ RooTest / resources / spring / Spring.js>< / script>
< script type =text / javascriptsrc =/ RooTest / resources / spring / Spring-Dojo.js>< / script>
< script type =text / javascriptlanguage =JavaScript> dojo.require(dojo.parser);< / script>
< / head>
< body class =tundra spring>
< div version =2.0id =menudojoType =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.PopupMenuBarItemid =c_car>
< h2> Car< / h2>
< ul dojoType =dijit.Menu>
< li dojoType =dijit.MenuItemid =i_car_new>
< a href =/ RooTest / cars?form>创建新车< / a>
< / li>
< li dojoType =dijit.MenuItemid =i_car_list
< a href =/ RooTest / cars>列出所有汽车< / a>
< / li>
< / ul>
< / li>
< / ul>
< / div>
< div id =main> ...< / div>< / body>< / html>


解决方案

你不会离开页面的原因当您单击是因为MenuItem在单击时调用dojo.stopEvent - 请参阅 http://trac.dojotoolkit.org/browser/dojo/tags/release-1.6.1/dijit/MenuItem.js#L92



如果你想这样做很多,我会很乐意扩展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 的调用,但我认为这个更亲切。


I am using Dijit Menu bar with declartive markup.

The Menu items contains links ('a'):

<li dojoType="dijit.MenuItem" id="i_car_new">
   <a href="/RooTest/cars?form">Create new Car</a>
</li>

The menu is rendered correct, and even the link is display as link, but when one click on this link in the menu, noting happens. (My actual workaround is to add an 'onClick' event with an 'window.location'.)

But I would expect that the links work like normal (user click, browswer request new page). So is my expectance wrong? And what must I change, that the links work?

relevant parts from the 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>

解决方案

The reason you don't navigate away from the page when you click is because the MenuItem calls dojo.stopEvent when you click it - see _onClick() at http://trac.dojotoolkit.org/browser/dojo/tags/release-1.6.1/dijit/MenuItem.js#L92

If you want to do this a lot I'd be tempted to extend the MenuItem with something like (old syntax, I've not moved over to the new AMD way of doing things yet, and untested):

dojo.provide('dijit.anchorMenuItem');
dojo.require('dijit.MenuItem');

dojo.declare('dijit.anchorMenuItem', dijit.MenuItem, {
    _onClick: function(evt) {
        this.getParent().onItemClick(this, evt);
    }
});

And then use this in place of the default MenuItem when you want a simple link. Otherwise, do as your saying and add a call to window.location on the onClick handler, but I think this is neater personally.

这篇关于Dijit菜单(酒吧)与链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆