EmberJS动态段错误

时间:2013-06-17 03:04:58

标签: ember.js ember-router

正如大多数Emberists所知道的那样,我现在正在撕裂我的头发,试图克服EmberJS所具有的垂直墙,这样我就可以到达天堂的顶峰。

这就是我现在所拥有的:

  <script type="text/x-handlebars" data-template-name="dogs">
    <h2> Pick a stack to view its cards </h2>
    <ul class="nav">
      {{#each model}}
      <li>{{#linkTo 'dog' this}} {{name}} {{/linkTo}}</li>
      {{/each}}
  </script>

我的路线定义如下:

App.Router.map(function(){
this.resource('dogs);
this.resource('dog', '/:dog_id');
});

因此,DogRoute的Model钩子被定义为:

App.DogRoute = EmberRoute.Extend({
   model: function(params){
   return App.Dog.find(params.id);
   }

});

最后,模型本身就非常基本:

App.Dog = DS.Model.extend({
    name = DS.attr('string')
});
在我的情况下,DS是一堆固定装置,所以我不打算把它写下来。但是,这不起作用,我不知道为什么。这是我在访问狗路线时遇到的错误,并期待一堆链接到狗的链接:

ember -... rc.5.js(第356行) 未捕获的异常:传递的上下文对象多于路径的动态段:dog

有谁可以指出这里做错了什么?

注意:如果我移除动态线段并简单地在我的狗车把内部渲染一条狗路线(这从车把上取下),那么链接(狗名称)就会被渲染。但是,我需要这些路由是动态段,而不仅仅是具有由ember / handlebars自动生成的唯一ID的超链接。

2 个答案:

答案 0 :(得分:3)

您的路由器声明错误。我应该更像这样:

App.Router.map(function() {
  this.resource('dogs');
  this.resource('dog', {path: '/:dog_id'});
});

答案 1 :(得分:1)

你得到的错误

  

ember -... rc.5.js(第356行)未捕获的异常:传递的上下文对象多于路径的动态段:dog

可能与您的路线映射有关。您应该定义如下路线:

App.Router.map(function() {
  this.resource('dogs', function() {
    this.resource('dog', {path: '/:dog_id'});
  });
});

此外,由于这是ember的默认行为,(请参阅动态模型下的here):

App.DogRoute = EmberRoute.Extend({
  model: function(params){
    return App.Dog.find(params.id);
  }
});

您无需明确定义它,因此您可以将其删除。 其余接缝是正确的,因为我可以看到。 我也提出了一个工作jsbin,看看。

希望它有所帮助。