knockoutjs-привязки с параметрами, срабатывающими при нагрузке



Я делал много нокаутов в последнее время, и я столкнулся со странным случаем.



как вы можете видеть в этой скрипке http://jsfiddle.net/hqXjv/ при настройке привязки к click: testMethod действие срабатывает при нажатии кнопки.



как вы можете видеть в этой скрипке http://jsfiddle.net/kxTzM/ при настройке привязки к click: testMethod('hi') действие срабатывает как при нажатии кнопки, так и при загрузке страницы (я предполагаю, что applyBindings)



наличие параметра не обязательно для воспроизведения проблемы, если вы измените привязку на click: testMethod() в первой скрипке вы видите, что она запускается при загрузке страницы.



Хотя, да, я мог бы добавить еще один атрибут к элементу и попытаться использовать его в качестве параметра, мой вопрос заключается в том, есть ли способ передать параметры привязкам knockoutjs, не вызывая их onload. Если это ошибка, так тому и быть, однако я просто хочу знать способ ее избежать.

544   3  

3 ответов:

Я думаю, что "примечание 2" на этой странице нокаута объясняет все это:

http://knockoutjs.com/documentation/click-binding.html

вы можете избежать этой проблемы, используя:

анонимные функции:

<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>

... или. ..

метод bind:

<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>

следующая выполненная функция щелчка при загрузке

click: clickSpan()

снять скобки как показано ниже, функция не была выполнена onload

click: clickSpan

(это указано в Примечании 2 выше, но это было в загадочной форме :-)

Я столкнулся с этим при следующих обстоятельствах:

  • я запускал Visual Studio 2013.
  • мой проект нокаута использовал TypeScript 1.5.
  • я запускал свой проект в chrome с помощью отладчика Visual Studio.
  • Я плохо переработал некоторый код и забыл перекомпилировать или повторно запустить отладчик.

из-за этого я считаю, что у меня был плохой машинописный текст, который не компилировался, только я не был получение каких-либо предупреждений или ошибок на этот счет, а также изменения, которые я внес в свой TypeScript, не были должным образом отражены в автоматически сгенерированных файлах JavaScript.

Это может быть необычно, что другие увидят это, но, я думаю, слово предупреждения заключается в том, что вы можете столкнуться с этим или другим неожиданным поведением, если вы редактируете TypeScript на месте во время запуска отладчика VS. Я подозреваю, что я создал ситуацию, которую Марк Робинсон описал в моих автоматически сгенерированных JS-файлах, но я не видел этого в моем машинописном тексте.

Comments

    Ничего не найдено.