0

我有一个具有可观察属性的对象。

this.userToAdd = {
        ID: ko.observable(""),
        FirstName: ko.observable(""),
        LastName: ko.observable(""),
        Active: ko.observable(""),
        Email: ko.observable(""),
        Roles: ko.observableArray([])
    };

单击按钮时,我尝试更新对象

$(document).on("click", ".edit", function () {

    var itemToUpdate = ko.dataFor(this);

    if (itemToUpdate.ID !== undefined) {
        //update observable
        vm.userToAdd.ID = itemToUpdate.ID;
        vm.userToAdd.FirstName = itemToUpdate.FirstName;
        vm.userToAdd.LastName = itemToUpdate.LastName;
        vm.userToAdd.Email = itemToUpdate.Email;
        vm.userToAdd.Active = itemToUpdate.Active;
        vm.userToAdd.Roles = itemToUpdate.Roles;
        //update form, and there must be a better way
        $('input[name="ID"]').val(itemToUpdate.ID);
        $('input[name="FirstName"]').val(itemToUpdate.FirstName);
        $('input[name="LastName"]').val(itemToUpdate.LastName);
        $('input[name="Email"]').val(itemToUpdate.Email);
        $('input[name="Active"]').val(itemToUpdate.Active);      
    }
});

它运行是因为我看到输入字段正在使用我期望的值进行更新,但模型没有更新。我究竟做错了什么?另外,我不得不使用

$('input[name="ID"]').val(itemToUpdate.ID);

更新输入字段

<input name="ID" type="text" placeholder="ID" data-bind="value: ID, valueUpdate: 'afterkeydown'" />         

因为即使更新了可观察属性,输入字段的值也不会更新。有人可以帮忙吗?

4

1 回答 1

3

ko.observable调用返回一个函数。要设置它的值,您需要使用新值作为参数调用它:

vm.userToAdd.ID(itemToUpdate.ID);
vm.userToAdd.FirstName(itemToUpdate.FirstName);
vm.userToAdd.LastName(itemToUpdate.LastName);
vm.userToAdd.Email(itemToUpdate.Email);
vm.userToAdd.Active(itemToUpdate.Active);
vm.userToAdd.Roles(itemToUpdate.Roles);

进一步阅读:阅读和写作 observables

要将新值写入可观察对象,请调用可观察对象并将新值作为参数传递。例如,调用 myViewModel.personName('Mary')会将名称值更改为“Mary”。

于 2013-04-25T13:53:44.700 回答