假设您在 Ember 应用程序中有以下路由。
App.Router.map(function() {
this.resource('series', function() {
this.resource('serie', { path: '/:serie_id' }, function() {
this.resource('seasons', function() {
this.resource('season', { path: '/:season_id' }, function() {
this.resource('episodes', function() {
this.resource('episode', { path: '/:episode_id' });
})
});
});
});
});
});
如何使用Handlebars 提供的帮助程序链接到特定剧集?linkTo
换句话说,Ember 是如何计算出 URL 的其他参数应该是什么,即serie_id
and episode_id
?文档指出我应该将episode
模型传递给episode
路由,如下所示。
{{#linkTo "episode" episode}}
这是链接到以下 URL 结构。
/series/:serie_id/seasons/:season_id/episodes/:episode_id/
当我linkTo
像这样使用助手时,Ember 会抛出一个错误,告诉我它不能get
用id
on调用undefined
。我假设它使用episode
模型来确定serie_id
andepisode_id
是什么,我的猜测是模型需要符合特定的约定(结构或蓝图),以便 Ember 找到这些id
s。
这些是我觉得 Ember 最困难的方面。即使您在调试模式下使用 Ember,它也不是很透明。非常感谢任何指针或引用。
更新1:经过一番挖掘,我发现路线的serialize
方法是实现这一目标的关键要素。但是,当我使用linkTo
如上所示的帮助器时,传递给路由serialize
方法的模型undefined
出于某种原因(即使它不是传递给linkTo
帮助器时。导致此发现的问题可以在这里找到。
更新 2:事实证明,当链接生成时,serieSeason
路线的方法接收到错误的模型,即一集而不是一季。serialize
不过,目前尚不清楚为什么它收到了错误的模型。方法的model
参数serialize
从哪里来?
更新 3:linkTo
如果我从所涉及的每个路由的方法返回静态数据,则助手工作正常serialize
,这意味着linkTo
助手不涉及问题。