Ich habe ein Beispiel für das Problem hier erstellt:KnockoutJS - Tabelle nicht aktualisiert, wenn Array aktualisiert wird
http://jsfiddle.net/JustinN/qWeLT/1/
Mein eigentlicher Code ist an eine ASP.NET Web-Methode angeschlossen, so dass der Beispielcode wurde optimiert, um auf einen öffentlichen Web-Service zu zeigen.
Grundsätzlich habe ich ein Array, an das ich binde, aber nach einem Ajax-Aufruf zeigt die Tabelle nicht die aktualisierte Information. Ich bin mir nicht sicher, was ich vermisse, ich dachte zuerst, ich brauche das Mapping-Plugin, also habe ich es versucht, komme aber immer noch nicht weiter.
Sicherlich bin ich nicht dazu bestimmt, jedes Mal, wenn sich meine Daten ändern, applyBindings zu verwenden?
[EDIT]
JavaScript unten:
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 unter:
<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>
Entschuldigung, ich habe meinen Code eingefügt, aber dann wurde ständig nach Beispielen für JSFiddle gefragt. Ich werde jetzt beide einschließen. - Bearbeitet und behoben. – JustinN
Wofür haben Sie die '.address' in dieser Zeile? 'ko.mapping.fromJS (data.d, self.items.address);' – Niko
Guter Deal. Ja, kopieren und einfügen ist am besten (erstaunlich, wie oft die Leute neu eingeben - und dann ohne Bezug auf Fehler!) und Live-Links als * adjunct * (ich bevorzuge http://jsbin.com, aber es ist Geschmackssache) sind großartig. –