Я действительно борюсь с чем-то, что мне показалось простым ...
Я делаю простую таблицу результатов поиска на основе вызова $ .get JSON и хочу сохранить свой код как " generi c "насколько возможно.
По моему (упрощенно) HTML:
<form id="searchForm">
(...)
<button type="button" onclick="search()">Search</button>
</form>
(...)
<tbody data-bind="foreach: data">
<tr>
<td data-bind="text: FOO"></td>
(...)
<td data-bind="text: BAR"></td>
</tr>
</tbody>
Затем по моим javascript (в script
тегах ниже на странице):
var search = function(){
var form = $('#searchForm');
$.getJSON("php/query/jsonQuery.php?jsonQuery=search", form.serialize(), function(jsonAnswer, textStatus) {
console.log(jsonAnswer);
if(typeof viewModel === 'undefined'){
var viewModel = ko.mapping.fromJS(jsonAnswer);
ko.applyBindings(viewModel);
}
else{
ko.mapping.fromJS(jsonAnswer, viewModel);
}
$('#divResults').show();
// console.log(viewModel)
});
}
Это прекрасно работает при первом щелчке "поиск" ... но не при следующем: Error You cannot apply bindings multiple times to the same element
.
Как вы можете догадаться, это очень уродливое "if" тестирование viewModel это отчаянная попытка избавиться от этой ошибки.
Я пробовал много вещей, но я просто не могу понять, как это сделать правильно ...
Я читал это Knockout JS обновить представление из json модель и этот Knockout Js v2.3.0: Ошибка Невозможно несколько раз применить привязки к одному и тому же элементу , но это не помогло мне очень ... может быть, потому что функция search () не вызывается при загрузке (и действительно не должна быть).
Любой мастер KO, чтобы дать мне подсказку? Заранее спасибо за помощь!