我使用Knockout可观察数组(self.data
)将表绑定到视图中,该数组由AJAX调用和Knockout映射插件填充。目的是将ViewModel作为一个可重用的组件。
我需要添加一个列来选择表行。我想通过使用映射选项将布尔isSelected
可观测属性添加到self.data
可观测数组中的每个项来实现这一点。然后,self.selectClicked
函数使用此可观测属性将项推送或弹出到self.selectedItems
可观测数组。
问题是,我不太确定如何将isSelected
属性添加到每个数组项中。
下面是目前的代码:
//// NOTE: ko.applyBindings and the AJAX call currently happen outside of this code.
function ViewModel() {
var self = this;
var mapping = {
// Boolean observable property for each array item added here?
};
self.data = ko.observableArray([]);
self.selectedItems = ko.observableArray([]);
self.selectClicked = function (data, event) {
if (event.currentTarget.checked) {
self.selectedItems.push(data);
}
else {
self.selectedItems.pop(data);
}
return true;
};
// AJAX Data is pushed to the self.data observable array through this function
self.addData = function (_data) {
ko.mapping.fromJS(_data, mapping, self.data);
};
}
发布于 2015-01-19 10:58:48
您可以手动创建数据对象并使用isSelected
添加create
。
var mapping =
{
create: function(_data) {
return new Data(_data.data);
}
};
self.addData = function (_data) {
ko.mapping.fromJS(_data, mapping, self.data);
};
var Data = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.isSelected = ko.observable(false);
};
JsFiddle
这在剔除映射插件文档中有记录。
https://stackoverflow.com/questions/28022059
复制相似问题