JavaScript三元似乎忽略了通过对象传递的值

时间:2017-11-08 01:56:51

标签: javascript

这可能是一个难以回答的问题,但我希望有人可能会有一些见解。

设置:

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_backgroundtrue

我测试了typeof options.set_as_background这是一个布尔值。

如果我明确地将表达式更改为img_height = (true ? 100 : 1000),我最终会得到100.

我不知道可能是什么原因。在AJAX调用的updateBackgroundImage函数中调用.done(如果这在某种程度上是异步问题,即使它在.done中)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。虽然问题本身可能对我的情况太具体,对其他人没什么帮助,但调试过程可能对遇到这篇文章的人有所帮助。

我之前使用console.logdebugger来查看值是什么,但直到现在我还没有完成任务(因为我得到的值不是显然是歪斜的。

长话短说,我在调试器的每一步都得到了正确的值,但画布的大小不正确,除非我直接将值插入setDimensions方法。 (我仍然不知道为什么这个有用,而且它是一个红色的鲱鱼)

实际问题是,在定义fabric_canvas的过程中,它实际上是在创建一个单独的对象实例。所以,我正确地设置了高度,但是我将它设置在错误的画布上,而不是在页面上查看的内容。

其中一个令人难以置信的愚蠢错误。

调试的关键是看到,实际上,画布在setDimensions之后被赋予了正确的高度,这导致我认为其他东西在之后被覆盖以覆盖它。所以我查看了实例数组,并注意到创建了一个额外的实例,而不是正在更新的实例。