这可能是一个难以回答的问题,但我希望有人可能会有一些见解。
设置:
updateBackgroundImage: function(image_data) {
let fabric_canvas;
fabric_canvas = window.drawingPrompts[0];
fabric_canvas.update({
image_url: image_data.url,
image_height: parseInt(image_data.dimensions.split('x')[1]),
image_width: parseInt(image_data.dimensions.split('x')[0]),
set_as_background: image_data.set_as_background
})
}
重要的部分是对fabric_canvas.update
的调用,如下所示:
update: function(options) {
let img_height;
this.background_image = (options.set_as_background ? options.image_url : null);
this.height = img_height = (options.set_as_background ? options.image_height : 1000);
this.background_width = options.image_width;
this.my_fabric_canvas.setDimensions({
width: this.width,
height: img_height
});
}
出于某种原因,img_height
始终设置为1000
,即使options.set_as_background
为true
。
我测试了typeof options.set_as_background
这是一个布尔值。
如果我明确地将表达式更改为img_height = (true ? 100 : 1000)
,我最终会得到100.
我不知道可能是什么原因。在AJAX调用的updateBackgroundImage
函数中调用.done
(如果这在某种程度上是异步问题,即使它在.done
中)
任何帮助都将不胜感激。
答案 0 :(得分:0)
我发现了这个问题。虽然问题本身可能对我的情况太具体,对其他人没什么帮助,但调试过程可能对遇到这篇文章的人有所帮助。
我之前使用console.log
和debugger
来查看值是什么,但直到现在我还没有完成任务(因为我得到的值不是显然是歪斜的。
长话短说,我在调试器的每一步都得到了正确的值,但画布的大小不正确,除非我直接将值插入setDimensions
方法。 (我仍然不知道为什么这个有用,而且它是一个红色的鲱鱼)
实际问题是,在定义fabric_canvas
的过程中,它实际上是在创建一个单独的对象实例。所以,我正确地设置了高度,但是我将它设置在错误的画布上,而不是在页面上查看的内容。
其中一个令人难以置信的愚蠢错误。
调试的关键是看到,实际上,画布在setDimensions
之后被赋予了正确的高度,这导致我认为其他东西在之后被覆盖以覆盖它。所以我查看了实例数组,并注意到创建了一个额外的实例,而不是正在更新的实例。