2012-08-01 32 views
1

我有一个项目模型,每个项目可以有很多项目。这可以是很深层次的。Ember.js订单有许多孩子

我有这样的jsfiddle http://jsfiddle.net/rmossuk/xmcBf/3/

我怎么改变这个要能够有一个项目多层次,也是我怎么循环下来每个级别显示它们?

我还需要能够订购每个项目的子项并存储该订单以保留到服务器。

请任何人都可以告诉我你可以如何做到这一点?

UPDATE:

我现在已经成功地实施项目可以是多层次这个问题的深一点看这里http://jsfiddle.net/rmossuk/fBmmS/3/

但我需要一种方法来说明每个项目的孩子的顺序和按照该顺序显示它们。目前它只是显示itemIds数组中的子项目,但这仅用于关联目的,我不能将其更改为重新排序。

任何人都知道如何做到这一点?

非常感谢 麦垛

+0

如果你已经解决了这个问题,你介意发布解决方案。 – brg 2012-08-03 10:52:02

+0

我还没有解决它!仍在尝试 !希望有人能尽快帮助我。 – 2012-08-03 11:11:11

+0

我看到Ember.ArrayController有一个sortProperties,但似乎无法解决如何为每个项目添加ArrayController来存储每个项目的子项目。希望有人能尽快帮助 – 2012-08-03 11:20:20

回答

13

在视图,使用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]') 
}); 

更复杂一点点,不过。 ..

+0

感谢迈克的答案一直试图排序这几天!有没有办法通过将订单存储在父级上而不必在每个项目上存储索引来实现这一点?试图做到这一点,因为如果我改变这个解决方案的订单或项目,我必须更改每个子项目上的所有索引,并将所有这些更改保留到服务器。如果我可以将孩子的实际顺序存储在父母身上,那么当我更改任何孩子的顺序时,我只需要保存并坚持父母。希望这是有道理的?有任何想法吗 ??非常感谢 – 2012-08-03 12:00:05

+0

更新的小提琴链接:为清晰起见添加了缩进... – 2012-08-03 12:04:28

+0

非常感谢很多 – 2012-08-03 12:35:31