我有一个具有可观察属性的对象。
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'" />
因为即使更新了observable属性,输入字段的值也不会更新。有人可以帮忙吗?
答案 0 :(得分: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);
进一步阅读:Reading and writing observables:
要将一个新值写入observable,请调用observable并传递 新值作为参数。例如,打电话
myViewModel.personName('Mary')
会将名称值更改为“Mary”。