Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 余烬-使用相同模型过渡到相同路线_Ember.js - Fatal编程技术网

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从服务器获取数据,一切都完成了。如果我再次单击左树项,则不会调用路由中的任何挂钩。这是我的要求。