Dijit菜单(栏)与链接

时间:2011-07-30 14:14:08

标签: menu dojo menuitem menubar

我正在使用具有声明标记的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>

2 个答案:

答案 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)
      }
    }
  )