menu - Dijit Menú(barra) con enlace
dojo menuitem (2)
Estoy usando la barra de menú de Dijit con marcado de declartivo.
Los elementos del menú contienen enlaces (''a''):
<li dojoType="dijit.MenuItem" id="i_car_new">
<a href="/RooTest/cars?form">Create new Car</a>
</li>
El menú se muestra correcto, e incluso el enlace se muestra como un enlace, pero cuando se hace clic en este enlace en el menú, se observa. ( Mi solución actual es agregar un evento ''onClick'' con ''window.location'' ) .
Pero espero que los enlaces funcionen como lo normal (clic de usuario, nueva página de solicitud de browswer). Entonces, ¿mi expectativa está equivocada? ¿Y qué debo cambiar para que los enlaces funcionen?
partes relevantes del 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>
La razón por la que no navega fuera de la página cuando hace clic es porque MenuItem llama a dojo.stopEvent cuando hace clic en él; consulte _onClick () en http://trac.dojotoolkit.org/browser/dojo/tags/release- 1.6.1 / dijit / MenuItem.js # L92
Si quieres hacer esto mucho, me sentiría tentado a extender el MenuItem con algo así como (sintaxis antigua, no me he movido a la nueva forma de AMD de hacer las cosas aún, y no probado):
dojo.provide(''dijit.anchorMenuItem'');
dojo.require(''dijit.MenuItem'');
dojo.declare(''dijit.anchorMenuItem'', dijit.MenuItem, {
_onClick: function(evt) {
this.getParent().onItemClick(this, evt);
}
});
Y luego use esto en lugar del MenuItem predeterminado cuando desee un enlace simple. De lo contrario, haz lo que dices y agrega una llamada a window.location
en el controlador onClick, pero creo que es más personal.
En dojo 1.7, probé:
dojo.provide(''dijit.anchorMenuItem'');
dojo.declare(''dijit.anchorMenuItem'', dijit.MenuItem, {
_onClick: function(evt) {
this.getParent().onItemClick(this, evt);
}
});
... que no se activó al hacer clic en MenuItem de nivel superior
Lo intenté:
dojo.connect(window.location,"onclick"...
... eso no funcionó.
FYI, aquí está lo que funcionó (para mí, no un experto):
dojo.connect(window,"onmouseup",function(_evt) {
var _wdg = dijit.getEnclosingWidget(_evt.target)
if (_wdg && _wdg.baseClass && _wdg.baseClass == "dijitMenuItem" && _wdg.onItemClick) {
_wdg.onItemClick(_evt)
}
}
)