我不确定这是否属于SO,因为它更多的是关于设计而不是编程。
我有一组模型,每个模型都有一个相应的组件。组件可以删除其模型。但是,删除模型时,也应该从数组中删除它们。
以下是我处理此问题的两种方法:
{{#each item in items}}
{{item-row item=item items=items}}
{{/each}}
在这种情况下,我将整个数组传递给子组件。子组件可以从items数组中删除自己的项目。
这是第二种方式:
{{#each item in items}}
{{item-row item=item removeItem="removeItem"}}
{{/each}}
此处,子组件发送removeItem
操作。当父组件收到removeItem
操作时,它会从数组中删除该项。
在Ember中哪个更好的方法呢?还有更好的方法吗?
答案 0 :(得分:0)
我肯定会推荐第二种方法,在组件上使用removeItem操作。它更干净,你的项目行组件不需要知道其他项目,为什么要这样呢?此外,这意味着每次更改items
时都不会更新,因此效率会稍高一些。
解决此问题的最佳方法是在调用removeItem
时传递该组件的项目。
this.sendAction('removeItem', this.get('item'));
然后,您只需处理控制器上removeItem
操作中的数组中的项目。
removeItem: function(removedItem) {
// As items is an array, iterate through it and remove the removedItem
var updatedItems = this.get('items').filter(function(item) {
return item.get('id') !== removedItem.get('id');
});
this.set('items', updatedItems);
}
希望有所帮助!