我有简单的Ember应用程序和Ember Data(由Rails提供支持)。我创建了这些路线:
App.Router.map(function () {
this.resource('bands', function () {
this.route('new');
this.resource('band', {path: ':band_id'}, function() {
this.route('edit');
});
});
});
然后,当我转到http://localhost:3000/#/bands/23/edit
时,我想看到ID为23的对象的值,如下所示:
<div>name: {{name}}</div>
{{! should output "name: Pavel" }}
但是,当我将该代码放入band/edit.hbs
时,应用程序仅显示“name:”,没有任何值。我已经弄明白了,因为内容没有传递给内部视图。当我将相同的代码直接放到band.hbs
时,一切都按预期工作。我在哪里犯了错误?如何将内容对象传递给控制器? (如果可能的话,我希望尽可能多地生成控制器。)
答案 0 :(得分:1)
您必须至少为BandEdit定义路线:
App.BandEditRoute = Ember.Route.extend({
model: function(params) {
return this.modelFor('band'));
}
});
如果需要,您可以在返回之前将模型添加到事务中。
你也可以通过在BandEdit Controller中引用parentController来做到这一点,但这似乎是一种不那么优雅的解决方法。
答案 1 :(得分:1)
这是因为您的内部视图(上下文现在将是视图本身)更改了context
,但该视图可以访问BandEditController
和它的关联模型,所以如果你总是首先引用model
,那么Ember会知道你在追求的是什么:{{model.name}}
/ {{model.genre}}
。
参见JSFiddle:http://jsfiddle.net/JZ84L/
(与安德烈的答案一起使用,因为如果你甚至没有通过model
到你的outlet
那么它就无法使用了。)