将内容传递到内部视图{{outlet}}

时间:2013-02-10 17:18:04

标签: ember.js

我有简单的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时,一切都按预期工作。我在哪里犯了错误?如何将内容对象传递给控制器​​? (如果可能的话,我希望尽可能多地生成控制器。)

2 个答案:

答案 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那么它就无法使用了。)