从 observableArray 中仅获取修改行的最佳方法(当有批量编辑选项时)
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是关于在 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/
这并不是看起来那么微不足道的任务。
首先,可观察数组仅处理数组的修改(插入、删除、重新排序等),而不处理元素的修改。
其次,您可能需要在模型中绑定到每个表行的特殊标志,例如“isModified”。
然后,如果某些绑定已更新,您需要设置该标志。 Knockoutjs observables 提供了 subscribe 方法,允许在 observables 更新时调用您自己的函数。
查看底部的页面 http://knockoutjs.com/documentation/observables.html有一个部分称为“显式订阅可观察量”。
有一个执行该任务的快速代码草案
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