Dijit Menu (бар) со ссылкой - PullRequest
       28

Dijit Menu (бар) со ссылкой

1 голос
/ 30 июля 2011

Я использую строку меню Dijit с декларативной разметкой.

Пункты меню содержат ссылки ('a'):

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

Меню отображается корректно, и даже ссылка отображается в виде ссылки, но если щелкнуть эту ссылку в меню, это произойдет. ( Мой реальный обходной путь - добавить событие onClick с помощью window.location. )

Но я ожидаю, что ссылки будут работать как обычно (пользовательский клик, запрос браузера на новую страницу). Так что, мои ожидания неверны? И что я должен изменить, чтобы ссылки работали?

соответствующие части из 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 ]

1 голос
/ 01 августа 2011

Причина, по которой вы не уходите со страницы при нажатии, заключается в том, что MenuItem вызывает dojo.stopEvent, когда вы щелкаете по ней - см. _OnClick () в 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, когда вы хотите простую ссылку. В противном случае, сделайте так, как вы говорите, и добавьте вызов к window.location в обработчике onClick, но я думаю, что это лично лучше.

0 голосов
/ 06 марта 2012

В додзё 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)
      }
    }
  )
...