Knockoutjs - привязки с параметрами, запускаемыми при загрузке
В последнее время я делал много нокаутов, и я встретил странное происхождение.
Как вы можете видеть в этом скрипте http://jsfiddle.net/hqXjv/ при настройке привязки к click: testMethod
, тогда действие срабатывает при нажатии кнопки.
Как вы можете видеть в этой скрипте http://jsfiddle.net/kxTzM/ при настройке привязки к click: testMethod('hi')
действие срабатывает как при нажатии кнопки, так и при загрузке страницы ( Я предполагаю применить applyBindings)
Если для изменения проблемы не требуется параметр, если вы изменили привязку к click: testMethod()
в первой скрипке, вы увидите, что она запускается при загрузке страницы.
Хотя, да, я мог бы добавить еще один атрибут элемента и попытаться использовать его в качестве параметра, мой вопрос в том, есть ли способ передать параметры привязки knockoutjs, не запуская их при загрузке. Если это ошибка, пусть будет так, но я просто хочу знать, как это избежать.
Ответы
Ответ 1
Я думаю, что "Примечание 2" на этой странице с нокаутом объясняет все это:
http://knockoutjs.com/documentation/click-binding.html
Вы можете избежать проблемы, используя:
Анонимные функции:
<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>
... или...
Метод привязки:
<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>
Ответ 2
После выполнения функции щелчка при загрузке
click: clickSpan()
снятие скобок, как показано ниже, функция не была выполнена onload
click: clickSpan
(это объясняется в примечании 2 выше, но оно было в загадочной форме: -)
Ответ 3
Я столкнулся с этим при следующих обстоятельствах:
- Я запускал Visual Studio 2013.
- Мой проект с нокаутом использовал TypeScript 1.5.
- Я выполнял свой проект в chrome с помощью отладчика Visual Studio.
- Я плохо отредактировал какой-то код и забыл перекомпилировать или повторно запустить отладчик.
Из-за этого я считаю, что случилось, что у меня был плохой TypeScript, который бы не компилировался, только я не получал никаких предупреждений или ошибок, и изменения, которые я сделал для моего TypeScript, не были правильное отражение в файлах JavaScript, созданных автоматически.
Это может быть необычно, что другие это увидят, но, я думаю, слово предупреждения состоит в том, что вы можете столкнуться с этим или другим неожиданным поведением, если вы редактируете TypeScript на месте во время работы отладчика VS. Я подозреваю, что создал ситуацию, которую Марк Робинсон описал в моих автогенерированных файлах js, но я не видел этого в TypeScript.