#javascript #knockout.js
#javascript #knockout.js
Вопрос:
Я определил функцию следующим образом в нокаутирующей модели. Когда пользователь нажимает на кнопку редактирования адреса в списке, это покажет форму адреса и заполнит ее выбранным адресом.
this.editAddress = function (address) {
self.addressErrors([]);
self.showAddressForm(1);
self.formAddress(address);
}
Однако эта функция запускается немедленно после определения, и форма отображается при загрузке страницы. Что я могу сделать, чтобы предотвратить это?
вот список html с привязками (упрощенный)
<ul data-bind="foreach: userAddresses">
<li>
<div>
<p data-bind="text: addressTitle"></p>
<p data-bind="text: nameSurname"></p>
<p>
<span data-bind="text: addressLine1"></span> <span data-bind="text: addressLine2"></span>
</p>
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
</div>
</li>
</ul>
Комментарии:
1. Покажите HTML-кнопку, которая привязывается к функции и определению модели.
2. Когда вы определяете функцию, как описано выше, она не будет запускаться. Сначала вы должны вызвать функцию. Чтобы устранить это, я советую поместить строку console.log («Сделал это здесь») в вашу функцию, чтобы проверить, запущена ли она. Если у вас есть несколько похожих функций, я советую разместить уникальный консольный журнал.
3. ну, я думаю, этот вопрос больше касается привязки щелчка нокаутом. каким-то образом он запускает определенную функцию в bind.
Ответ №1:
Я не думаю, что это выполняется немедленно, я думаю, что ваша привязка к форме выполняет это.
В частности, эта строка:
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
Обратите внимание, что ваша привязка к щелчку $root.editAddress($data)
Измените вашу привязку следующим образом:
<p><button class="btn btn-default" data-bind="click: $root.editAddress">Edit address</button></p>
Обратите внимание на удаление ($data)
. click:
ожидает ссылку на функцию.
Удаление ($data)
немедленно остановит привязку от выполнения вашей функции. (До того, как вы вызывали $root.editAddress
немедленный вызов, и он возвращал ‘undefined’, так что ваш click:
был фактически привязан к undefined
.)
Обратите внимание, что knockout автоматически переходит $data
к вашей функции, поэтому вам не нужно делать ничего сложного.
Комментарии:
1. Только что понял это, и вы спасли меня от ответа на мой собственный вопрос. И это хорошее объяснение проблемы. 🙂
2. @Azadrum, похоже, ответ всегда приходит через несколько мгновений после запроса… 🙂 Рад, что вы разобрались с этим.
Ответ №2:
Возможно, вы можете выполнить действие при событии, таком как щелчок. Я не знаком с knockout.js но это может быть полезно.
http://knockoutjs.com/documentation/click-binding.html
Удачи.
Комментарии:
1. Спасибо, что указали документацию. Перечитал это и понял, что если я использую привязку типа data-bind=»click: $ root.editAddress ($data), это автоматически запустит editAddress.