#javascript #jquery #knockout.js
#javascript #jquery #knockout.js
Вопрос:
Пример короткого кода:http://jsfiddle.net/j2nsg/2 /
JS:
function AppViewModel() {
var self = this;
self.values = ko.observableArray([{annotation:"blah2"}, {annotation:"blah4"}]);
}
$("#delete").click(function() {
var removeMe = {annotation: "blah2"};
model.values.remove(function(item) {
return _.isEqual(item, removeMe); //this is just a deep equals between objects, actual code has far more complex stuff
});
});
var model = new AppViewModel();
ko.applyBindings(model);
HTML:
<div id="Menu">
<p>Stuff In list:</p>
<select id="resultsDb" data-bind="foreach:values">
<option data-bind="text:annotation">
</select>
</div>
<br>
<a href="javascript:null()" id="delete">delete</a>
Все, что это делает, это заполняет наблюдаемый массив в knockout и предоставляет кнопку для удаления элемента при нажатии. Однако, если вы нажмете кнопку, консоль отобразит ошибку Uncaught TypeError: object is not a function
. С точки зрения функциональности, все кажется, работает. Есть ли способ исправить эту ошибку (если это вообще ошибка)?
Редактировать: Строка для ошибки (для chrome) гласит VM994: 1, (анонимная функция)
Ответ №1:
Это вызвано попыткой вызова null
, которая не является функцией. Вместо javascript:null()
вы можете просто использовать #
или даже полностью оставить href
выключенным.
Комментарии:
1. Не сделает ли отключение href его недоступным?
2. @KevinL нет; он по-прежнему будет реагировать на событие click.
Ответ №2:
Я думаю, вы хотите javascript:void(null)
В любом случае вы должны обрабатывать свой щелчок с помощью knockout, а не jquery. Кроме того, обычно лучше не использовать a
элемент для подобных кнопок. Вам лучше использовать button
, или span
.