在我的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);
    }
}

09-25 19:49