1

我有一个可观察的数组“用户”,它在显示时基本上是一个网格。用户将单击 LoginId 的链接,该链接将打开一个模型来编辑单个用户(名字、姓氏,以及更多不在网格视图中的内容等)。如果用户在编辑模式上更改名字,我希望它在成功保存后反映在网格上。我见过两种方法:使用 arrayFirst 查找并将用户删除/重新添加到网格或使可观察数组中的每个项目可观察。我不确定什么是让它工作的最佳方法,以及如何正确设置 observable 数组 observable 如果这是最好的方法。

function UserViewModel() {    

                var self = this;

                //data which is populated on a load AJAX function => self.users(msg.d);
                self.users = ko.observableArray([]);                   

                self.updateUser = function () {
                    //set edit modal elements
                    self.editFirstName(this.FirstName);
                    //set the rest for edit
                    //open modal, user edits 'editFirstName' and hits save
                    //data saved to DB
                    //now I want to update the FirstName the user edited in the users array so I don't have to repull all users in the grid

                   }

}

HTML 片段

<tbody data-bind="foreach: users">
            <tr>
                <td class="border-left"><a href="#"  data-bind="text: LoginId,click: $parent.updateUser"/></td>
                <td data-bind="text: FirstName"/>
                <td data-bind="text: LastName"/>
                <td data-bind="text: EmailAddress"/>
                <td data-bind="text: AccessLevel"/>                  
                <td data-bind="text: Status" class="border-right" />
            </tr>
            </tbody>
4

1 回答 1

3

如果您希望表在值更改时更新,表绑定到的属性需要是observables. 你没有发布你的User课程,所以我不知道是不是这样,但它应该看起来像这样:

var Person = function(data) {
    var self = this;
    self.loginId = data.loginId;
    self.firstName = ko.observable(data.firstName);
    self.lastName = ko.observable(data.lastName);
    self.emailAddress = ko.observable(data.emailAddress);
    self.accessLevel = ko.observable(data.accessLevel);
    self.status = ko.observable(data.status);
};

当您更改这些值时,表应该会更新。在这个小提琴中检查一下

于 2013-07-09T16:46:09.767 回答