knockoutjs-привязки с параметрами, срабатывающими при нагрузке
Я делал много нокаутов в последнее время, и я столкнулся со странным случаем.
как вы можете видеть в этой скрипке http://jsfiddle.net/hqXjv/ при настройке привязки к click: testMethod действие срабатывает при нажатии кнопки.
как вы можете видеть в этой скрипке http://jsfiddle.net/kxTzM/ при настройке привязки к click: testMethod('hi') действие срабатывает как при нажатии кнопки, так и при загрузке страницы (я предполагаю, что applyBindings)
наличие параметра не обязательно для воспроизведения проблемы, если вы измените привязку на click: testMethod() в первой скрипке вы видите, что она запускается при загрузке страницы.
Хотя, да, я мог бы добавить еще один атрибут к элементу и попытаться использовать его в качестве параметра, мой вопрос заключается в том, есть ли способ передать параметры привязкам knockoutjs, не вызывая их onload. Если это ошибка, так тому и быть, однако я просто хочу знать способ ее избежать.
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