我从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中描述?
答案 0 :(得分:0)
我在另一个doc页面中找到了答案(为什么不在doc中的同一个地方?)
从路由调用transitionTo()或从a调用transitionToRoute() 控制器将停止当前正在进行的任何转换并启动a 新的,作为重定向。 transitionTo()表现完全正确 比如link-to helper。
如果新路线有动态段,则需要传递模型 或每个段的标识符。传递模型将跳过该模型 segment的model()钩子(因为模型已经加载)。