灰烬 - 过渡到相同模型的相同路线

时间:2015-08-29 10:15:29

标签: ember.js

我有一个左侧树列表,列表中的每个项目都使用不同的模型打开相同的路径。我想要的是,如果我一次又一次地点击同一个项目,我想要再次加载路线。我知道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

3 个答案:

答案 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)

通过这样做,我得到了它,

我在对象中维护currentRouteNamecurrentModelId(唯一标识模型的id),并在所有路径中注入。它会在任何转换时得到更新。

来自左树的所有转换都通过一个公共函数,在该函数中,我检查转发路由,modelId是否与当前路由相同,modelId。如果是这样,我将更改另一个全局注入的属性refreshSameRoute的值。在子路由中观察到此值,如果更改了this.refresh(),则会调用该值。

仍在寻找更好的方法。

答案 2 :(得分:0)

转换方法(如transitionToRoutereplaceRoute)会返回一些参数,包括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();
}