创建控制器使模型不会到达模板

时间:2014-12-18 12:01:04

标签: ember.js

我正在构建我的第一个余烬应用程序(ember-cli),我很困惑。

我有以下路线,它根据模型中的属性成功选择了一个视图:

import Ember from 'ember';

export default Ember.Route.extend({
  afterModel: function(tournament) {
    var state = tournament.get('state');
    if (state === 0) {
      this.transitionTo('tournaments.setup', tournament);
    } else if (state === 1) {
      this.transitionTo('tournaments.play', tournament);
    } else if (state === 2) {
      this.transitionTo('tournaments.complete', tournament);
    }
  }

});

然后我想在tournaments.setup页面添加一些功能。所以我添加了一个控制器(tournaments/controllers/setup.js

import Ember from 'ember';

export default Ember.Controller.extend({
  actions: {
    start: function() {
      var that = this;
      var model = this.get('model');
      model.set('state',1);
      model.save().then(function(tournament) {
        that.transitionToRoute('tournaments.play', tournament);
      });
    }
  }
});

在启用我创建的start操作以更改模型并重定向到所需路径的意义上,这是有效的。但这也会使模型无法进入setup.hbs模板,如下所示:

<h3>{{name}}</h3>
<h4>Setup!</h4>
<p>{{state}}</p>
<p>{{eventDate}}</p>
<button {{action "start"}} class="btn btn-primary">Start</button>

如果controllers/tournaments/setup.js文件不存在,则显示模型的属性。以某种方式创建此文件(当我转到setup路径时未调用)会阻止模型到达模板。

我也尝试过明确定义路由setup.js路由,但这没有帮助。

我正在使用FixtureAdapter,如果这很重要的话。有任何想法吗?我缺少一个概念吗?

1 个答案:

答案 0 :(得分:2)

如果您希望在控制器上自动设置模型,则应在Ember.ObjectController中扩展Ember.Controller而不是tournaments/controllers/setup.js