Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何链接到Ember.js中的嵌套资源?_Ember.js_Handlebars.js - Fatal编程技术网

如何链接到Ember.js中的嵌套资源?

如何链接到Ember.js中的嵌套资源?,ember.js,handlebars.js,Ember.js,Handlebars.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' }

假设您在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' });
          })
        });
      });
    });
  });
});
如何使用Handlebar提供的
linkTo
帮助程序链接到特定的插曲?换句话说,Ember如何计算URL的其他参数,即
系列id
插曲id
?文档说明我应该将
插曲
模型传递到
插曲
路径,如下所示

{{#linkTo "episode" episode}}
这是为了链接到以下URL结构

/series/:serie_id/seasons/:season_id/episodes/:episode_id/
当我像那样使用
linkTo
helper时,Ember抛出一个错误,告诉我它不能在
未定义的
上使用
id
调用
get
。我假设它使用
插曲
模型来计算
系列id
插曲id
是什么,我猜模型需要符合特定的约定(结构或蓝图),以便Ember找到这些
id
s

这些是我发现余烬最困难的方面。即使在调试模式下使用Ember,它也不是很透明。任何提示或参考都非常感谢

更新1:经过一些挖掘,我发现路由的
序列化方法是实现这一点的关键元素。但是,当我使用如上所示的
linkTo
帮助程序时,由于某种原因,传递给路由的
serialize
方法的模型是
未定义的
(即使在传递给
linkTo
帮助程序时不是这样。可以找到导致此发现的问题。

更新2:当链接生成时,
serieSeason
route的
serialize
方法接收到错误的模型,一个插曲而不是一个季节。但是,不清楚它为什么接收到错误的模型。
serialize
方法的
model
参数来自哪里?


更新3:
linkTo
助手工作正常,如果我从涉及的每个路由的
serialize
方法返回静态数据,这意味着
linkTo
助手不涉及问题。

事实证明,答案可以在正确记录的Ember源代码中找到……因为我这是一个人在网上搜索了几天后做的事

答案很简单。链接到
帮助程序接受多个模型。对于目标URL的每个动态段,您传递一个相应的模型。每个传递的模型将成为目标URL中相应路由的模型。在我上面描述的示例中,这将导致以下结果

{{#linkTo "episode" serie season episode}}
serie
模型将被传递给
serie
路由,
seasure
模型将被传递给
seasure
路由,
session
模型将被传递给
session
路由。让许多开发人员感到困惑的是,当您使用
linkTo
帮助程序时,路由的
model
钩子不会被触发。如果您意识到开发人员通过传递一个或多个模型(或零)为相应的路由提供(或可以提供)模型,那么这并不奇怪


因为没有太多关于深度嵌套资源的文档,所以了解
linkTo
helper是如何在引擎盖下完成其工作的并不是一件小事。深入到Ember的源代码中肯定有助于加快框架的速度。

也许你问这个问题的时候还没有这一点…@LucasPottersky,现在也没有!