我遇到了我认为是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达到每个代码.
这意味着我目前无法可靠地遍历数组并删除实体.你会注意到,如果你继续点击删除按钮,代码最终会到达所有实体.
有什么想法吗?
您不能以这种方式删除实体.它类似于循环遍历列表并在您离开时从中删除项目.它导致你循环的列表随着你的进展而改变,你最终会跳过项目.
这样做.
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)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |