Web applications 为什么击倒赛只是第一次绑住我的桌子?

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;

我有以下代码,它使用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 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是绑定只在第一次工作的主要原因。