-1

我有一个带有 Ember Data 的简单 Ember 应用程序(由 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时,应用程序仅显示“名称:”,没有任何值。我发现这是因为内容没有传递给内部视图。当我将同一段代码直接放入时band.hbs,一切都按预期工作。我在哪里做错了?如何将内容对象传递给控制器​​?(如果可能的话,我希望生成尽可能多的控制器)。

4

2 回答 2

1

您必须至少定义 BandEdit 的路线:

App.BandEditRoute = Ember.Route.extend({
  model: function(params) {
    return this.modelFor('band'));
  }
});

如果需要,您始终可以在返回之前将模型添加到事务中。

您也可以通过从 BandEdit 控制器中引用 parentController 来做到这一点,但这似乎是一种不太优雅的解决方法。

于 2013-02-10T17:46:44.837 回答
1

这是因为context已被您的内部视图更改(上下文现在将是视图本身),但视图将可以访问BandEditController及其关联的模型,因此如果您始终引用第model一个,那么 Ember 将知道您在追求什么:{{model.name}}/ {{model.genre}}

见 JSFiddle:http: //jsfiddle.net/JZ84L/

(与安德烈的答案一起使用,因为如果你甚至没有通过model你的,outlet那么它就无法使用。)

于 2013-02-10T17:49:06.657 回答