正如大多数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的超链接。
答案 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,看看。
希望它有所帮助。