在视图,使用sortedItems
计算特性,定义如下:。
JS
App.Item = DS.Model.extend({
name: DS.attr('string'),
index: DS.attr('number'),
items: DS.hasMany('App.Item', {key: 'itemIds'}),
item: DS.belongsTo('App.Item'),
product: DS.belongsTo('App.Product'),
sortedItems: function() {
var items = this.get('items').toArray();
return items.sort(function (lhs, rhs) {
return lhs.get('index') - rhs.get('index');
});
}.property('[email protected]')
});
在这里看到一个完整有效的解决方案:http://jsfiddle.net/MikeAski/K286Q/3/
编辑
所述的T Ø您的要求,这里是另一种解决方案,保持母体内的排序IDS(以尽量减少更新&指标管理):http://jsfiddle.net/MikeAski/K286Q/12/
JS
App.Item = DS.Model.extend({
name: DS.attr('string'),
items: DS.hasMany('App.Item', {key: 'itemIds'}),
sortedIds: DS.attr('string', { key: 'sortedIds' }),
item: DS.belongsTo('App.Item'),
product: DS.belongsTo('App.Product'),
sortedChildren: function() {
if (!this.get('isLoaded')) {
return [];
}
var sortedIds = this.get('sortedIds').split(','),
items = this.get('items').toArray();
return sortedIds.map(function (id) {
if (id === '') {
return null;
}
return items.find(function (item) {
return item.get('id') == id;
});
}).filter(function(item) {
return !!item;
});
}.property('isLoaded', 'sortedIds', '[email protected]')
});
更复杂一点点,不过。 ..
如果你已经解决了这个问题,你介意发布解决方案。 – brg 2012-08-03 10:52:02
我还没有解决它!仍在尝试 !希望有人能尽快帮助我。 – 2012-08-03 11:11:11
我看到Ember.ArrayController有一个sortProperties,但似乎无法解决如何为每个项目添加ArrayController来存储每个项目的子项目。希望有人能尽快帮助 – 2012-08-03 11:20:20