基本上,它是这样的。我有一个非常结构化的dojo应用程序,使用dojo样板项目/模板(来自Github)。我几乎完成了所有不同的模块,使我的应用程序成为现实(它是一种cms)。因此,它是一个单页面应用程序,可以在某个区域动态呈现内容。
我的EntryPoint.html如下所示:
<div style="height:100%;">
<div
data-dojo-type="dijit.layout.BorderContainer"
data-dojo-attach-point = "appLayout"
data-dojo-props="design: 'headline'"
style="height:100%;">
<div
class="centerPanel"
data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region: 'center'">
<button data-dojo-attach-point ="testButton" type="button" disabled="disabled">Click Me!</button>
<div id="placeholder"></div>
</div>
<div
class="edgePanel"
data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region: 'top'">Header content (top)
<span class="test"></span>
</div>
<div
id="leftCol" class="edgePanel"
data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region: 'left', splitter: true">
<div id="administrationMenu" class="administrationMenu">
<div class="administrationTitle"> Administration </div>
<ul>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/user.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Users </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/email.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Emails </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/tools.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Settings </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/graph.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Logs </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/faq.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Help </a></li>
</ul>
</div>
<div id="toolsMenu" class="toolsMenu">
<div class="toolsTitle"> Managing tools </div>
<ul>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/donwload.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Resources </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/play.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Playlists </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/clock.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Agenda </a></li>
<li><img border="0" src="file:///C:/Users/Dev 2/Desktop/mpact-dojo-boilerplate/src/app/resources/img/silver-gray/monitor.png" alt="Pulpit rock" width="24" height="24"/><a href="#"> Stations </a></li>
</ul>
</div>
</div>
</div>
</div>
*我知道,我知道我的形象应该在css中,但我不是一个真正的设计师,我真的没有创造/调整界面的乐趣。
我的EntryPoint.js:
define([
"dojo/_base/declare",
"dijit/_Widget",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"./ui/layout/GridLayout",
"dojo/text!./ui/templates/EntryPoint.html",
"dijit/layout/BorderContainer",
"dijit/layout/TabContainer",
"dijit/layout/ContentPane"
], function(
declare,
_Widget,
_TemplatedMixin,
_WidgetsInTemplateMixin,
GridLayout,
template
){
return declare([_Widget, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
constructor: function() {
},
postCreate: function() {
//var gridLayout = new GridLayout({}, "placeholder");
//gridLayout.placeAt("placeholder");
}
});
});
好吧,所以我想基本上能够点击我的各种列表( administrationMenu 和 toolsMenu )。所以,我的内容在 centerPanel 中加载/渲染。另外,我想将我的点击项目放在网址中。
用例场景:当我第一次加载我的应用程序时,它会加载主页。然后,如果我单击我的菜单项(例如设置),它将加载我的设置页面。网址将改为:www.myapp.com/settings。
谢谢。
可能的解决方案:对于每个菜单,使用data-dojo-attach-point并指定名称。使用dojo.query(“”)。connect for each并从我的自定义代码创建一个实例(例如new SettingsPage)并在我的centerPanel上呈现它......
答案 0 :(得分:2)
我有一个类似的设置,一个'列表',将各种小部件加载到内容窗格中。在底部链接的代码有点复杂,因为它具有加载微调器的功能,在卸载时检查isdirty并且执行大量需要/垃圾收集..
最简单的方案是使用dijit.Tree列出您的条目,例如使用这样的json结构:
adminJson = { identifier:'url', items: [
{ url: 'admin/user', label: 'user' },
{ url: 'admin/email', label: 'email' }
];
在Tree
中,将此链接与特定内容窗格相关联 - 例如 centerPanel 。
tree.on("click", function (item) { // refer to paneRequested
dijit.byId('centerPanel').set("href", this.model.store.getValue(item, 'url'));
});
使用树而不是<li>
项,您将获得选项,例如使用所有图标创建精灵表,然后使用iconClass设置正确的图标,例如:
<style>
.administrationListTree .dijitTreeNode .iconNode {
background: url(.....app/resources/img/silver-gray/adminsprites.png) top left no-repeat transparent;
}
.administrationListTree .dijitTreeRow .iconNode.user { background-position: 0 0; }
.administrationListTree .dijitTreeRow .iconNode.email { background-position: -20px 0; }
</style>
<script>
new dijit.Tree({
getIconClass: function(item, opened) {
return item.label;
}
});
</script>
看一下https://github.com/mschr/oocms/blob/master/admin/include/application.js的一些额外技巧,只需跳过dtopic.publish(“notify / progress /?”)和module = [?]部分。
我有一种感觉,因为你带有'administrationMenu'的名字,unloadPane之前的动作会引起人们的兴趣。每个开关将1)调用AbstractController.isDirty或2)实现自定义检查 - 然后只有在用户允许或没有待更改时才卸载。
答案 1 :(得分:1)
您可以使用dojo.back修改位置栏中的网址,并让浏览器后退/转发功能正常工作。
http://dojotoolkit.org/reference-guide/1.7/dojo/back.html
“设置页面”是从服务器加载的html页面还是负责在浏览器上创建页面的dojo小部件?如果它是一个html页面,那么@mschr给出的答案将对你有用。
如果您希望“设置页面”成为窗口小部件,则可以将中心面板设为dijit.StackContainer
。选择菜单项时,创建相应的子窗口小部件并将其添加到StackContainer
并对服务器进行后台调用以获取必要的json数据。
http://dojotoolkit.org/reference-guide/1.7/dijit/layout/StackContainer.html