从 observableArray 中仅获取修改行的最佳方法(当有批量编辑选项时)

发布于 2024-12-23 14:58:17 字数 121 浏览 0 评论 0原文

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

I have an ObservableArray collection which binds to the HTML table with bulk edit option (MVC3), every time the user hits commit I wanted to send only the modified rows from the collection instead of sending entire viewmodel list, please advise if any best way to track or filter only the modified rows.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心是晴朗的。 2024-12-30 14:58:17

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

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

下面是一个示例,显示每个项目上的脏标志以及仅包含脏项目的计算可观察值:http://jsfiddle.net/ rniemeyer/wauwn/

Here is a post about creating a dirty flag in Knockout that will track changes to all observables in an object.

Typically, you would add a dirty flag to each item in your array in a constructor function or loop through each item and add the flag. Then, you can create a computed observable to represent just the changed items for sending back to the server.

Here is a sample that shows a dirty flag on each item and a computed observable that contains only the dirty items: http://jsfiddle.net/rniemeyer/wauwn/

篱下浅笙歌 2024-12-30 14:58:17

这并不是看起来那么微不足道的任务。

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

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

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

有一个执行该任务的快速代码草案

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;
}

It it not so trivial task as it may looks like.

At first, observable array only handles modification of array (insert, remove, reorder etc.) not modification of element.

At second, you would probably need special flag like 'isModified' in your model that binds to each table row.

Then you need to set that flag if some of the binding was updated. Knockoutjs observables provides method subscribe that allows to call your own function when observables is updated.
Take a look at page http://knockoutjs.com/documentation/observables.html at the bottom there is a section called 'explicitly subscribe to observables'.

There is a quick draft of code that performs that task

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文