为物业提供不同的控制器

时间:2014-12-26 07:47:51

标签: ember.js controller

我有一个会话和一个测试。 Session包含许多测试 - 因此在模型中它是DS.HasMany

视图有一个测试表,我希望它可以排序。 所以问题是 - 如何在会话

中为测试“属性”定义tests控制器

session.hbs:

<div class="main-container">
    <h1>session {{id}}</h1>

    <table class="tests-table table table-bordered">
        <tr>
            <th>ID</th>
            <th>Logical ID</th>
            <th>name</th>
        </tr>
      {{#each test in tests}}
          <tr>
              <td>{{test.id}}</td>
              <td>{{test.logicalId}}</td>
              <td>{{test.name}}</td>
          </tr>
      {{/each}}
    </table>
</div>

路由/ session.js:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    return Ember.RSVP.hash({
      session: this.get('store').find('session', params.session_id),
      tests: this.get('store').find('test', {
        session_id: params.session_id
      })
    });
  },

  setupController: function(controller, model) {
    controller.set('model', model.session);
    var testsController = this.controllerFor('tests');
    testsController.set('model', model.tests);
  }
});

1 个答案:

答案 0 :(得分:0)

解决方案1:

为了使测试表可以排序,您不必提供测试控制器。你可以这样做:

{{#each test in sortedTests}}
      <tr>
          <td>{{test.id}}</td>
          <td>{{test.logicalId}}</td>
          <td>{{test.name}}</td>
      </tr>
  {{/each}}

在你的模板中,你可以在SessionController中执行:

sortedTests: Ember.computed.sort('tests', 'logicalId'(

如果要按逻辑ID或

的顺序对测试进行排序
sortedTests: Ember.computed.sort('tests', function(a,b){
  //your custom sorting function
  a.name >= b.name
})

如果你想要进行更复杂的排序。

解决方案2:

但是,如果您仍想为表使用专用的测试控制器,只需使用您的排序逻辑编写TestsController,并使用如下的测试模板:

{{#each test in controller}}
      <tr>
          <td>{{test.id}}</td>
          <td>{{test.logicalId}}</td>
          <td>{{test.name}}</td>
      </tr>
  {{/each}}

现在,您可以在会话模板中使用余烬render帮助程序:

<table class="tests-table table table-bordered">
    <tr>
        <th>ID</th>
        <th>Logical ID</th>
        <th>name</th>
    </tr>
  {{render "tests" tests}} // this will render the tests template in-place
  // using the testsController backed with tests as its model
</table>

ember文档有关于该主题的a good read