我有一个会话和一个测试。
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);
}
});
答案 0 :(得分:0)
为了使测试表可以排序,您不必提供测试控制器。你可以这样做:
{{#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
})
如果你想要进行更复杂的排序。
但是,如果您仍想为表使用专用的测试控制器,只需使用您的排序逻辑编写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