我有一个左侧树列表,列表中的每个项目都使用不同的模型打开相同的路径。我想要的是,如果我一次又一次地点击同一个项目,我想要再次加载路线。我知道ember通常不会这样运作。是否有任何调整来实现这一目标?
更新: 左侧树是父路径。单击左侧树中的项目,子路径将加载到其出口。
我的左树将按照这样结构,
item1(link to bodyRoute1 with model1)
item2(link to bodyRoute1 with model2)
item3(link to bodyRoute1 with model3)
item4(link to bodyRoute2 with model1)
...etc
答案 0 :(得分:2)
您可以使用refresh()
路由方法api link,例如:
// route
actions: {
refreshRoute: function() {
this.refresh();
}
}
//template
<ul>
{{#each items as |item|}}
<li {{action 'refreshRoute'}}>{{item}}</li>
{{/each}}
</ul>
<强>更新强>
需要从服务器
更新其中一个控制器属性
所以你可以使用afterModel
模型钩子。
来自guides:
最常见的原因是,如果您通过{{link-to}}
或transitionTo
转换为包含动态网址细分的路线(而不是由网址更改引起的转化) ,您已经指定了要转换到的路线的模型(例如{{#link-to 'article' article}}
或this.transitionTo('article', article))
,在这种情况下模型挂钩不会被调用强>。
在这些情况下,您需要使用beforeModel
或 afterModel
挂钩来容纳任何逻辑,而路由器仍在收集全部路线的模型进行过渡。
答案 1 :(得分:0)
通过这样做,我得到了它,
我在对象中维护currentRouteName
和currentModelId
(唯一标识模型的id),并在所有路径中注入。它会在任何转换时得到更新。
来自左树的所有转换都通过一个公共函数,在该函数中,我检查转发路由,modelId是否与当前路由相同,modelId。如果是这样,我将更改另一个全局注入的属性refreshSameRoute
的值。在子路由中观察到此值,如果更改了this.refresh()
,则会调用该值。
仍在寻找更好的方法。
答案 2 :(得分:0)
转换方法(如transitionToRoute
和replaceRoute
)会返回一些参数,包括targetName
。当查询参数相同时,targetName
返回undefined
。您可以检查并刷新路线。
const queryParams = {<your params>};
const routeName = 'my.route';
const transition = this.transitionToRoute(routeName, { queryParams });
if (transition.targetName !== routeName) {
const route = getOwner(this).lookup(`route:${routeName}`);
route.refresh();
}