breeze bug:forDeach循环中的setDeleted

zpy*_*dee 1 breeze

我遇到了我认为是Breeze中的一个bug.为了确保错误与我项目中的其他代码无关,我在Ward Bell提供的一个plunker中模拟了同样的问题.

我添加到Ward的原始plunker的代码是:

在main.html中

<button ng-click="vm.deleteHero(vm.currentHeroVm.hero)">Delete hero</button>
Run Code Online (Sandbox Code Playgroud)

并在main.js

vm.deleteHero = deleteHero;
    function deleteHero(hero) {
      console.log(hero.powerMaps.length);
      hero.powerMaps.forEach(function(powerMap) {
        console.log('Hero: ' + powerMap.heroId + ', Power: ' + powerMap.powerId);
        powerMap.entityAspect.setDeleted() // comment me out to see console.log work correctly
  });
}
Run Code Online (Sandbox Code Playgroud)

要看到手头的问题,请注意console.log我正在制作的电话.第一个显示powerMaps所选英雄的数组长度.第二个显示循环内powerMap的英雄和幂id.

有了hero选择,打开控制台窗口,并击中Delete按钮.

如果有人注释掉该行powerMap.entityAspect.setDeleted(),则应用程序会正确地遍历每行powerMap.

但是,只要powerMap.entityAspect.setDeleted()添加到代码中,就不会powerMap达到每个代码.

这意味着我目前无法可靠地遍历数组并删除实体.你会注意到,如果你继续点击删除按钮,代码最终会到达所有实体.

有什么想法吗?

Jam*_*esT 6

您不能以这种方式删除实体.它类似于循环遍历列表并在您离开时从中删除项目.它导致你循环的列表随着你的进展而改变,你最终会跳过项目.

这样做.

vm.deleteHero = deleteHero;

function deleteHero(hero) {
    console.log(hero.powerMaps.length);
    while (hero.powerMaps.length > 0) {
        var powerMap = hero.powerMaps[0];
        console.log('Hero: ' + powerMap.heroId + ', Power: ' + powerMap.powerId);
        powerMap.entityAspect.setDeleted() 
    });
}
Run Code Online (Sandbox Code Playgroud)