Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript renderAll()在fabric.js中不起作用_Javascript_Canvas_Fabricjs - Fatal编程技术网

Javascript renderAll()在fabric.js中不起作用

Javascript renderAll()在fabric.js中不起作用,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,我用fabric.js在画布上绘制了一栋建筑的六层。为了只显示一个楼层,我执行以下操作: building.selectFloor = function(floorId){ for (var i = 0; i < floors.length; i++){ if (floorId == floors[i].name){ floors[i].visible = true; }else{ floors[i]

我用fabric.js在画布上绘制了一栋建筑的六层。为了只显示一个楼层,我执行以下操作:

building.selectFloor = function(floorId){

    for (var i = 0; i < floors.length; i++){
        if (floorId == floors[i].name){
            floors[i].visible = true;
        }else{
            floors[i].visible = false;          
        }
    }
    canvas.renderAll();
};

但它们确实消失了。为什么一个renderAll()工作,而另一个不工作?我尝试将不起作用的renderAll()包装在window.timeOut中,以查看延迟是否有帮助,但没有成功。

好-因此我最终找到了答案:
building
是一个组,它似乎被某种内部结构魔法缓存,缓存的版本正在被渲染,而不是更新的版本。要呈现更新版本,必须执行以下操作

canvas.building.set('dirty', true);
canvas.renderAll();
希望这能帮到其他人

编辑

事实证明还有一个更简单的解决方案:

canvas.building.objectCaching = false

有一个新版本将格式更改为:

canvas.requestRenderAll();

这在以后的版本中对我有效:

//对于一个画布
myCanvas.objectCaching=false;
//所有画布
fabric.Object.prototype.objectCaching=false;
//在这两种情况下,仍然需要重新渲染
myCanvas.renderAll();

ps:使用版本4.2.0

canvas.building.objectCaching=false-->有关此操作的详细信息,请参见:
canvas.requestRenderAll();