Web applications 为什么击倒赛只是第一次绑住我的桌子?
我有以下代码,它使用knockout将HTML表绑定到Person对象列表:Web applications 为什么击倒赛只是第一次绑住我的桌子?,web-applications,knockout.js,knockout-2.0,Web Applications,Knockout.js,Knockout 2.0,我有以下代码,它使用knockout将HTML表绑定到Person对象列表: function PersonModel(person) { var self = this; self.id = person.Id; self.firstName = person.FirstName; self.surname = person.Surname; self.email = person.Email; self.cell = person.Cell;
function PersonModel(person) {
var self = this;
self.id = person.Id;
self.firstName = person.FirstName;
self.surname = person.Surname;
self.email = person.Email;
self.cell = person.Cell;
}
function PersonListModel(personList) {
var self = this;
self.persons = ko.observableArray(personList);
}
function getPersonList() {
$.getJSON("Person/IndexJson", function (allData) {
var mappedPersons = $.map(allData, function (item) { return new PersonModel(item); });
ko.applyBindings(new PersonListModel(mappedPersons), $("#person-list")[0]);
});
}
$(function () {
$("#refresh").click(function() {
getPersonList();
});
getPersonList();
});
要绑定的HTML如下所示:
<table>
<tbody id="person-list" data-bind="foreach: persons">
<tr data-bind="attr: { 'data-id': id }, click: $parent.personClicked">
<td data-bind="text: firstName"></td>
<td data-bind="text: surname"></td>
<td data-bind="text: email"></td>
<td data-bind="text: cell"></td>
</tr>
</tbody>
</table>
<a id="refresh" href="#"></a>
我的问题是,只有在第一次加载页面时才正确填充表。在通过单击刷新链接触发的所有后续ajax调用中,表都是空的。在所有情况下都会返回相同的ajax结果,因此我怀疑我可能错过了一些淘汰调用,这些调用“释放”了初始绑定,以便为后续绑定或其他事情让路 您不需要在ajax例程中进行新的建模。下面应该可以解决你的问题
var perList = ko.observableArray({});
function getPersonList() {
$.getJSON("Person/IndexJson", function(allData) {
var mappedPersons = $.map(allData, function(item) {
return new PersonModel(item);
});
perList(PersonListModel(mappedPersons));
});
}
ko.applyBindings(perList, $("#person-list")[0]);
谢谢你的提醒。虽然我确信它将适用于其他地方,但它不能回答我的问题,也不能解决我的问题。正如我在问题中所说,表在第一次正确绑定。根据我的经验,重新绑定到新的ko.observable是绑定只在第一次工作的主要原因。