动态细分过渡

时间:2016-07-18 09:03:12

标签: javascript ember.js handlebars.js

我从emberjs 2.6的官方文件中读到:

  

注意:具有动态段的路径只有其模型钩子   通过URL输入时调用。如果输入路线   转换(例如,当使用链接到Handlebars帮助器时),然后a   已提供模型上下文,并且不执行挂钩。路线   没有动态段将始终执行模型钩

所以我试着看看自己的工作方式:

post.js

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    alert("executed");
    return this.get('store').findRecord('post', params.post_id);
  }
});

index.hbs

{{#link-to "post" 1}}
        post.title
{{/link-to}}

index2.hbs

{{#link-to "post" aPostInstance}}
        post.title
{{/link-to}}

因此,当我打开index.hbs并单击链接时,不会调用模型钩子,而是文档确认的内容。

但是当我打开index2.hbs并点击链接时,模型钩子被调用,即使它是一个trinsition,而不是链接重新加载。

我可以理解第二点,因为我给路由一个id,所以它使用id从商店获取帖子,但为什么这个点没有在doc中描述?

1 个答案:

答案 0 :(得分:0)

我在另一个doc页面中找到了答案(为什么不在doc中的同一个地方?)

  

从路由调用transitionTo()或从a调用transitionToRoute()   控制器将停止当前正在进行的任何转换并启动a   新的,作为重定向。 transitionTo()表现完全正确   比如link-to helper。

     

如果新路线有动态段,则需要传递模型   或每个段的标识符。传递模型将跳过该模型   segment的model()钩子(因为模型已经加载)。