Ember.js 余烬-使用相同模型过渡到相同路线
我有一个左树状列表,列表中的每个项目都以不同的模型打开相同的路径。我想要的是,如果我一次又一次地点击同一个项目,我希望再次加载路由。我知道余烬通常不会这样运作。是否有任何调整来实现这一点 更新: 左树是父路由。单击左树中的项目时,子路由将加载到其出口 我左边的树的结构是这样的Ember.js 余烬-使用相同模型过渡到相同路线,ember.js,Ember.js,我有一个左树状列表,列表中的每个项目都以不同的模型打开相同的路径。我想要的是,如果我一次又一次地点击同一个项目,我希望再次加载路由。我知道余烬通常不会这样运作。是否有任何调整来实现这一点 更新: 左树是父路由。单击左树中的项目时,子路由将加载到其出口 我左边的树的结构是这样的 item1(使用model1链接到bodyRoute1) 项目2(使用model2链接到bodyRoute1) 第3项(使用model3链接到bodyRoute1) 项目4(使用model1链接到bodyRoute2) …
item1(使用model1链接到bodyRoute1)
项目2(使用model2链接到bodyRoute1)
第3项(使用model3链接到bodyRoute1)
项目4(使用model1链接到bodyRoute2)
…etc
您可以使用刷新()
路由方法,例如:
// route
actions: {
refreshRoute: function() {
this.refresh();
}
}
//template
<ul>
{{#each items as |item|}}
<li {{action 'refreshRoute'}}>{{item}}</li>
{{/each}}
</ul>
//路由
行动:{
refreshRoute:函数(){
这个。刷新();
}
}
//模板
{{{#每个项目作为|项目}
- {{item}
{{/每个}}
更新
需要从服务器更新控制器属性之一
因此,您可以使用afterModel
modelhook
发件人:
最常见的原因是,如果您正在通过{{link to}
或转换到
(与URL更改引起的转换相反)转换到具有动态URL段的路由,那么您正在转换到的路由的模型将已经指定(例如{{链接到“article”article})
或this.transition('article',article))
,在这种情况下,模型挂钩将不会被调用
在这种情况下,当路由器仍在收集所有路由模型以执行转换时,您需要使用
beforeModel
或afterModel
钩子来容纳任何逻辑
我在一个对象中维护currentRouteName
和currentModelId
(唯一标识模型的id),并将其注入所有路由。它会在任何转换时更新
从左树开始的所有转换都经过一个公共函数,在该函数中,我检查转发路由modelId是否与当前路由modelId相同。如果是这样,我将更改另一个全局注入属性的值refreshSamerout
。在子路由中观察到该值,如果该值发生更改,则调用此.refresh()
仍在寻找更好的方法。用于转换的方法,如
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();
}
constqueryparams={};
const routeName='my.route';
const transition=this.transitionRoute(routeName,{queryParams});
if(transition.targetName!==routeName){
constroute=getOwner(this).lookup(`route:${routeName}`);
route.refresh();
}
左树是父路由。更新了问题。我可以问一下,对于同一型号,您所说的“再次加载的路线”到底是什么意思吗?您希望从服务器刷新模型,或者希望在模型钩子中执行某些操作?通常,可以通过修改模型
、前模型
、后模型
和设置控制器
挂钩来实现这种行为。但这取决于您到底想要什么。是的,需要从服务器更新一个控制器属性。我猜您不理解我的要求。我遵循了上面的步骤,使用afterModel从服务器获取数据,一切都完成了。如果我再次单击左树项,则不会调用路由中的任何挂钩。这是我的要求。