5

我有一个ObservableArray集合,它使用批量编辑选项(MVC3)绑定到 HTML 表,每次用户点击提交时,我只想发送集合中修改后的行,而不是发送整个视图模型列表,请告知是否有最佳跟踪方法或仅过滤修改的行。

4

2 回答 2

15

这是一篇关于在 Knockout 中创建脏标志的帖子,该标志将跟踪对象中所有可观察对象的更改

通常,您会在构造函数中为数组中的每个项目添加脏标志,或者循环遍历每个项目并添加标志。然后,您可以创建一个计算的 observable 来表示仅用于发送回服务器的更改项。

这是一个示例,显示每个项目上的脏标志和仅包含脏项目的计算 observable:http: //jsfiddle.net/rniemeyer/wauwn/

于 2011-12-29T04:22:43.303 回答
2

它不像看起来那么简单的任务。

首先,可观察数组只处理数组的修改(插入、删除、重新排序等),而不是元素的修改。

其次,您可能需要在模型中绑定到每个表行的特殊标志,例如“isModified”。

然后,如果某些绑定已更新,则需要设置该标志。Knockoutjs observables 提供方法 subscribe 允许在 observables 更新时调用您自己的函数。看看页面http://knockoutjs.com/documentation/observables.html在底部有一个名为“显式订阅 observables”的部分。

有执行该任务的代码的快速草稿

function CreateArrayElementViewModel(inputData) {
     // Creating our view model
     var result = {
           prop : ko.observable(inputData.prop),
           val : ko.observable(inputData.val),
           isModified: false // This property would be true if entity was edited
     };     
     // Iterate over all properties and subscribe to knockoutjs observables
     for(prop in result) {
          if (typeof(result[prop].subscribe) != 'undefined') {
               result[prop].subscribe(function() { result.isModified = true; });
          }
     }

     return result;
}
于 2011-12-29T00:16:38.747 回答