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