我有包含用于使用所述路由器基于区块导航应用的信息的JSON文件。每个图块可以是直接连接到外部应用程序的链接,也可以包含点击图块时显示的子图元。这些中的每一个都可能有自己的子类,等等。 JSON最终将由OData服务提供,因此应用需要动态创建导航,因为它可能会发生变化。如何从JSON创建一个动态路由列表?
我该如何实现路由器的URL看起来像#tile1/tile1-1/tile1-1-3
这将表明用户点击第一个瓷砖,它进入了他们点击第一个瓷砖的屏幕,然后是他们点击的另一个屏幕第三块瓷砖?当来自书签时,该路线将使用来自JSON的tile1-1-3节点的子节点加载屏幕。
名称“tile1-1-3”等只以帮助观察瓷砖的这个例子中的位置。在真实版本中,名称不会指示树中的位置,它们将更像#MyApps/MyApprovalApps
。
我有一个递归函数,它遍历每个节点并生成单个路径,但我不确定如何添加动态模式,如{tile}/{subtile}/{subtile}
以及我认为将需要在各级之间正确导航所需的父路由。
我有一个Home.view.xml
它显示顶级瓷砖和Page1.view.xml
其他级别的subtiles。它是否正确?如果不是,我该如何动态创建视图?
希望我的目标很明确,如果需要,我可以进一步谈。
它创建路由递归函数:
createRoutes: function(aData, oRouter){
for(var i=0; i<aData.length; i++){
oRouter.addRoute({name: aData[i].id,
pattern: aData[i].title,
view: "Page1"}); //parent?
if(aData[i].subtiles.length > 0){ // has subtiles
this.createRoutes(aData[i].subtiles, oRouter);
}
}
}
JSON:
{
"TilesCollection" : [
{
"id" : "tile1",
"title" : "tile1",
"target" : "#",
"subtiles" : [
{
"id" : "tile1-1",
"title" : "tile1--1",
"target" : "#",
"subtiles" : []
}
]
},
{
"id" : "tile2",
"title" : "tile2",
"target" : "#",
"subtiles" : [
{
"id" : "tile2-1",
"title" : "tile2--1",
"target" : "#",
"subtiles" : []
},
{
"id" : "tile2-2",
"title" : "tile2--2",
"target" : "#",
"subtiles" : []
},
{
"id" : "tile2-3",
"title" : "tile2--3",
"target" : "#",
"subtiles" : [
{
"id" : "tile2-3-1",
"title" : "tile2--3--1",
"target" : "#",
"subtiles" : []
},
{
"id" : "tile2-3-2",
"title" : "tile2--3--2",
"target" : "#",
"subtiles" : []
}
]
}
]
},
{
"id" : "tile3",
"title" : "tile3",
"target" : "#",
"subtiles" : []
},
{
"id" : "tile4",
"title" : "tile4",
"target" : "#",
"subtiles" : [
{
"id" : "tile4-1",
"title" : "tile4--1",
"target" : "#",
"subtiles" : []
}
]
}
]
}
我把你的逻辑和应用到我自己的版本,它也设置了父路由,并且它工作得很好。现在,路线只设置在具有子物体的位置(没有点为没有子物体本身的区域设置路线),并且如果它们是子物体,则会设置父路线以及代码提供的适当模式。非常感谢。为了让这个应用程序正常工作还有点工作,但我真的很喜欢这个问题的解决! – pyro 2015-04-02 08:57:02
很高兴帮助:) – cschuff 2015-04-02 08:58:21