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