在我的Ember应用程序中,我有以下代码可以动态删除选中的行
removeRow: function(row){
// Some logic to remove one row at a time
var numberContainers = this.get('containers').length;
for (var i = 0; i < numberContainers; i++){
}
}
this.get('containers').forEach(function(container){
if (container.applicable === true){
var row = {};
self.send("removeRow", row);
}
})
现在,用户可以选择多个行并尝试将其删除。使用上述代码,“ removeRow”操作仅被调用一次,即,一次调用“ removeRow”操作后,forEach循环以某种方式中断,或者控件不再返回。
如何处理这种情况?
最佳答案
评论中提到了几件事。您有一些不同的气味和错误:
在数组上进行迭代时,您正在尝试对其进行修改。
您正在发送一个动作来调用它,而不是调用组件的函数。
尚不清楚var row = {}; self.send("removeRow", row);
是否适合使用container
为什么要删除新创建的row
对象?
无论如何,我的建议是:
分离数组修改和迭代
将removeRow
定义为一个函数,如果您需要将其用作动作处理程序,还可以定义一个动作处理程序并将整个职责委派给该函数。
这是一个示例代码:
removeRow: function(row){
// Some logic to remove one row at a time
var numberContainers = this.get('containers').length;
for (var i = 0; i < numberContainers; i++){
}
}
otherFunction(){
let applicables = this.get('containers').filterBy('applicable', true);
applicables.forEach(a=>{let row={};this.removeRow(row);});
}
actions:{
removeRow(row){
this.removeRow(row);
}
}