Я создал пример проблемы здесь:KnockoutJS - таблица не обновляется, когда массив обновляется
http://jsfiddle.net/JustinN/qWeLT/1/
Мой реальный код подключен к веб-метод ASP.NET, так что пример кода был настроен на то, чтобы продемонстрировать публичную веб-службу.
В принципе, у меня есть массив, к которому я привязываюсь, однако после вызова ajax в таблице не отображается обновленная информация. Я не уверен, что мне не хватает, я подумал, что сначала мне нужен плагин для сопоставления, поэтому я пробовал это, но я все равно ничего не получаю.
Неужели я не должен применять приложения каждый раз, когда меняют данные?
[EDIT]
JavaScript ниже:
var ViewModel = function() {
var self = this;
self.items = ko.observableArray([]);
self.refresh = function() {
$.ajax({
type: "POST",
url: "http://api.wipmania.com/json",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
ko.mapping.fromJS(data.d, self.items.address);
}
});
};
}
var viewModel = new ViewModel();
$(function() {
ko.applyBindings(viewModel);
viewModel.refresh();
});
HTML ниже:
<table data-bind="visible:items.length > 0">
<thead>
<tr>
<th>Country</th>
<th>Code</th>
</tr>
</thead>
<tbody data-bind="foreach: items">
<tr>
<td data-bind="text:country"></td>
<td data-bind="text:country_code"></td>
</tr>
</tbody>
</table>
Извините, что я использовал для вставки моего кода, но затем все время спрашивали о примерах JSFiddle. Теперь я включу оба. - Отредактировано и исправлено. – JustinN
Зачем у вас '.address' в этой строке? 'ko.mapping.fromJS (data.d, self.items.address);' – Niko
Хорошая сделка. Да, копия и вставка лучше всего (поразительно, как часто люди перепечатывают, а затем вводят несвязанные ошибки!) и живые ссылки в качестве дополнения * (я предпочитаю http://jsbin.com, но это вопрос вкуса) великолепны. –