Knockout: Привязка события не завершается во время привязки, если функция не существует

Созданный на 23 февр. 2017  ·  6Комментарии  ·  Источник: knockout/knockout

Если я передаю несуществующую функцию привязке event , она завершится ошибкой только во время выполнения, а не во время привязки. Это может привести к скрытым ошибкам, если приложение не будет полностью покрыто во время тестирования. В отличие от этого, например, привязка submit проверяет связанное значение и немедленно выдает ошибку, если это не функция.

"Тихий" сбой вызван этой строкой в ​​привязке event .

var handlerFunction = valueAccessor()[eventName];
if (!handlerFunction)
  return;

Это намеренное поведение? Если нет, я бы хотел подготовить PR, добавив проверку к привязке event аналогичной привязке submit .

average minor bug

Самый полезный комментарий

Поразмыслив, я все еще думаю, что проблема заключается в том, что нокаут не вызывает ошибку привязки, когда я передаю функцию, в которой, например, я допустил опечатку.

Вероятно, мы должны ввести проверку перед подключением обработчиков событий и разрешить явные значения null , но не что-либо еще.

Все 6 Комментарий

Я хотел бы подготовить PR, добавив проверку привязки к событию, аналогичную привязке отправки.

Было бы здорово. Спасибо.

@mbest При проверке спецификаций кажется, что это поведение действительно было намеренным, существует явный тест для передачи null в событие mouseout , и последняя строка соответствующего теста заявляет, что этого не должно быть. throw (при запуске события mouseout ). Вы можете вспомнить, с какой целью это было? для меня это на первый взгляд не имеет никакого смысла.

Я имею в виду именно эту строку: https://github.com/knockout/knockout/blob/master/spec/defaultBindings/eventBehaviors.js#L26

Похоже, это связано с тем, что valueAccessor переоценивается при каждом вызове обработчика событий, поэтому я предполагаю, что это позволяет нам динамически приостанавливать обработку событий для некоторых событий. Но вариант использования для этого на первый взгляд неясен, и я даже не могу найти никаких заметок об этом в документации.

поэтому я предполагаю, что это позволяет нам динамически приостанавливать обработку событий для некоторых событий

Хм. Вы можете быть правы. Я помню, как это применялось раньше как метод приостановки событий.

Я отследил изменение до # 73, так что это было некоторое время (до того, как я был задействован).

Поразмыслив, я все еще думаю, что проблема заключается в том, что нокаут не вызывает ошибку привязки, когда я передаю функцию, в которой, например, я допустил опечатку.

Вероятно, мы должны ввести проверку перед подключением обработчиков событий и разрешить явные значения null , но не что-либо еще.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги