如何在一个循环中删除一个observableArray并使用knockout?

时间:2015-09-06 18:15:20

标签: javascript knockout.js

我在observableArray中有一个名为emails的对象数组。阵列中的每个电子邮件都有一个关联的复选框,可以一次选择多条消息。为了将函数应用于多个项目,我遍历电子邮件以查看它们是否已被检查,如果它们是,则运行该函数:

self.deleteSelected = function() {
    for (var i = 0; i < self.emails().length; i++) {
        if (self.emails()[i].selected() == true) {
            ** what would go here **
        }
    }
}

我所拥有的循环正是我想要的,因为我将它与其他函数一起使用,但我似乎无法从observableArray中删除索引。如果尝试.remove().splice,但我无法让其中任何一个工作。

知道我需要添加到该函数中以使其在循环时删除数组中的相应索引吗?

1 个答案:

答案 0 :(得分:1)

我猜你在从正在遍历的数组中删除元素时会遇到问题。作为一种替代方法,为什么不用你想要保留的项目构建一个新数组呢?

这些方面应该有效:

observableArray

顺便说一句,在一次操作中替换splice(),从性能的角度来看也更好:每次使用remove()length时,都会导致相关的DOM要完全重建,这种方式只发生一次。

请注意,在我的代码中还有两个小的性能改进:

  • 我在变量中缓存了observable而不是每次都检索它们

  • 我在数组function customCIAutoload($classname){ $path = array('libraries'); if(strpos($class, 'CI_') !== 0) { foreach($path as $dir) { $file = APPPATH.$dir.'/'.($class).'.php'; if (file_exists($file) && is_file($file)) @include_once($file); } } } spl_autoload_register('customCIAutoload');中存储了一个变量,而不是在每个for循环中访问该属性。