我正在Aurelia重建这个pentomino块拼图(Angular版本在这里:http://www.ashware.nl/pentomino)因为我无法在Angular中实现我想要的效果。益智游戏工作得很好,但是自动求解器 - 一个为谜题计算所有可能解决方案的服务(有很多)是如此繁忙,以至于Aurelia不会更新DOM。
我建立的服务(solver-service.js)主要包括一个试图在棋盘上适合一个块(在它所有可能的位置)的功能。当它成功时,它会递归调用自己以适应下一个块,它会在卡住时使用回溯。 我尝试了几种方法来反映视图中求解器的模型更改,最新的信号是'触发值块转换器,用于拼图块(pentominoes)的定位和定位。
我尝试使用微任务来反映aurelia生命周期中的变化,requestAnimationFrame()并承诺在.then()部分执行下一步,但这会使进程异步,从而打破了回溯机制。 我可能有可能使用双(嵌套)repeat.for来渲染块,这是罪魁祸首。
当我在检查器中断执行时,Aurelia确实更新了视图,但只更新了repeat.for的第一级,因此更新了位置,但没有更新块的方向/旋转,这反映在二级。
可以在此处查看代码:https://github.com/Esger/Pentominos2/tree/feature/solver
那么在繁重的计算过程中让Aurelia一直更新视图的最佳方法是什么? - 我想继续展示解决过程。
答案 0 :(得分:1)
网络工作者做到了! :)我把求解器服务放在一个Web工作者,一个单独的线程中,所以Aurelia不再被它的繁重计算所阻挡。 工作人员不时或在找到解决方案时将数据发送到主线程。完美!
一个问题就是:Aurelia确实用工作人员找到的块的位置来更新视图,但只有当我点击或尝试滚动页面时 - 我必须继续这样做才能持续查看更新。
因此,单击并滚动页面会触发Aurelia更新视图。如果能够自己做到这一点会更好。谢谢@jeffG的指示。