Ember.js设置控制器,然后访问控制器内的模型

时间:2014-05-12 12:50:42

标签: ember.js ember-data

我是Ember.js的新手,这是我的第一个应用程序,它有一个通知区域,始终可见。由于此通知区域包含在应用程序模板中,并且没有特定的路由,因此我使用{{render}} Helper添加了数字,并从ApplicationRoute设置了模型:

<script type="text/x-handlebars">
    ...
    {{#link-to "notifications"}}
        {{ render "notification-totals" }}
    {{/link-to}}

    <div class="dropdown">
       {{outlet notifications}}
    </div>
    ...

</script>

<script type="text/x-handlebars" data-template-name="notification-totals">
    {{this.firstObject.total}}
</script>

ApplicationRoute将模型设置为控制器:

App.ApplicationRoute = Ember.Route.extend({
    setupController: function() {
        this.controllerFor('notification-totals').set('model',this.store.find('notification.total'));
    }
});

模特:

App.NotificationTotal = DS.Model.extend({
    total: DS.attr('number')
});

如何在Controller中访问模型?我没有尝试任何工作,例如:

App.NotificationTotalsController = Ember.ObjectController.extend({
    total: function() {
       var model = this.get('model');
       .....
    }.property()
});

1 个答案:

答案 0 :(得分:2)

您的代码应该可以正常运行。您应该获取模型对象的数组,因为这是路径设置为模型的内容。

例如:

  <script type="text/x-handlebars">
    <div><h3>Notifications:</h3>
    {{ render "notification-totals" }}</div>
  </script>

  <script type="text/x-handlebars" data-template-name="notification-totals">
    {{total}}
  </script>
App = Ember.Application.create();

App.Router.map(function() {
  // put your routes here
});

App.ApplicationRoute = Ember.Route.extend({
    setupController: function() {
      var data = [
        {
          total: 7
        }, {
          total: 8
        }, {
          total: 12
        }
      ];
      this.controllerFor('notification-totals').set('model', data);
    }
});

App.NotificationTotalsController = Ember.ObjectController.extend({
    total: function() {
      var model = this.get('model');
      return model
        .mapBy("total")
        .reduce(function (prev, cur) {
          return prev + cur;
        }, 0);
      console.log(model);
    }.property("model.@each.total")
});

此控制器将访问所有模型对象并生成总和({{this.firstObject.total}}将仅从第一个对象获得总计)。工作演示here

如果您仍然没有得到任何结果,请检查您的数据源是否有任何结果(此演示使用硬编码值而不是ember数据)。