Bar*_*obs 13 handlebars.js ember.js
假设您在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' });
})
});
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
如何使用Handlebars提供的助手链接到特定剧集linkTo?换句话说,Ember如何确定URL的其他参数应该是什么,即serie_id和episode_id?文档说明我应该将episode模型传递给episode路线,如下所示.
{{#linkTo "episode" episode}}
Run Code Online (Sandbox Code Playgroud)
这是链接到以下URL结构.
/series/:serie_id/seasons/:season_id/episodes/:episode_id/
Run Code Online (Sandbox Code Playgroud)
当我使用linkTo这样的帮手,恩贝尔抛出一个错误告诉我,它不能调用get与id上undefined.我认为它使用的episode模型,找出了serie_id和episode_id是我的猜测是,该模型需要顺应了灰烬找到这些特定的约定(结构或蓝图)id秒.
这些是我觉得Ember最难的方面.即使在调试模式下使用Ember,它也不是很透明.任何指针或参考都非常感谢.
更新1:经过一番挖掘,我发现路线的serialize方法是实现这一目标的关键因素.但是,当我使用linkTo如上所示的帮助程序时,传递给路径serialize方法的模型是undefined出于某种原因(即使它没有传递给linkTo帮助程序.导致此发现的问题可以在这里找到.
更新2:事实证明,当生成链接时,serieSeason路线的serialize方法接收错误的模型,即剧集而不是季节.但是,目前尚不清楚它为什么会收到错误的模型.方法的model参数serialize来自哪里?
更新3:linkTo如果我从所serialize涉及的每个路由的方法返回静态数据,帮助程序工作正常,这意味着linkTo帮助程序不涉及问题.
Bar*_*obs 24
事实证明,答案可以在正确记录的Ember来源中找到......因为这是人们在网上搜索了几天之后所做的事情.
答案很简单.该linkTo助手接受多个模型.对于目标URL的每个动态段,您将传递相应的模型.每个传递的模型将成为目标URL中相应路径的模型.在我上面描述的示例中,这导致以下结果.
{{#linkTo "episode" serie season episode}}
Run Code Online (Sandbox Code Playgroud)
该serie模型将被传递给serie路线,该season模型的season路线,和episode模型的episode路线.令许多开发人员感到困惑的是,model当您使用linkTo帮助程序时,不会触发路径的挂钩.如果您意识到开发人员通过传递一个或多个模型(或零)为相应的路径提供(或可以提供)模型,那么这并不太令人惊讶.
因为没有太多关于深层嵌套资源的文档,所以找出linkTo帮助程序如何在其中完成其工作并非易事.在Ember的源头潜水肯定有助于加快框架的速度.