Вызов закрытия с несовпадающими аргументами: функция «вызов» снова

Ровно месяц назад я столкнулся с этой проблемой Вызов закрытия с несовпадающими аргументами: вызов функции с js-взаимодействием.

Теперь у меня та же проблема с библиотекой SnapSVG. Я использую его в сочетании с JsInterop с момента. Сегодня я попытался использовать функцию mouseover и получил такое же исключение.

Но когда я наводил курсор на элемент SVG, моя функция срабатывала четыре раза:

hover in
hover in
hover in
hover in 
Breaking on exception: Closure call with mismatched arguments: function 'call'

Я старался :

var img = s.image("$url", x, y, image.width/2, image.height/2); 
js.FunctionProxy hover = new js.FunctionProxy(() {
  print("hover in");
});

img.mouseover(hover);

а также

var img = s.image("$url", x, y, image.width/2, image.height/2);
img.mouseover(() {
  print("hover in");
});

На этот раз я проверил дважды, и у функции обратного вызова нет дополнительных аргументов.


person Glenn Sonna    schedule 18.12.2013    source источник


Ответы (1)


Судя по вставляемым журналам, обработчик mouseover иногда вызывается с параметрами, а иногда без них. Чтобы справиться с этим, вы можете использовать функцию с необязательными параметрами:

var img = s.image("$url", x, y, image.width/2, image.height/2);
img.mouseover(([p1, p2, p3, p4]) {
  print("hover in");
});

Приведенный выше обратный вызов теперь обрабатывает вызовы с параметрами от 0 до 4.

person Alexandre Ardhuin    schedule 19.12.2013
comment
Черт... это помогло... Это очень странно... Еще раз спасибо, Александр! - person Glenn Sonna; 19.12.2013