我想替换多维数组中的特定字段值。我试图用替换功能替换它。
但是,语法结构可能存在问题。因此,我无法替换它。
当我检查我的可观察阵列时,该下方阵列显示在控制台中。
0 : {id: "1", title: "IT Manager", "description" : "description 1"}
1 : {id: "2", title: "Manager", "description" : "description 2"}
我想像在1个索引数组中一样动态地更改值,想从描述2 更改为描述3 。
在键盘上,我在下面调用此函数并获取当前的父数据:
changeQty : function(itemIndex){
self.displayProductData.splice(4,self.displayProductData()[itemIndex.id], newQtyVal);
},
该怎么做?
请帮助我。
答案 0 :(得分:1)
如果尝试替换可观察数组中对象的特定属性,则该属性将不起作用,因为这些属性本身不是可观察的。
您有2个选择:
您提到替换无效。你是这样吗?
var viewModel = function(){
var self = this;
//demo
var itemIndex = {
id:1
}
self.displayProductData = ko.observableArray([
{id: 0, description: 'desc 1'},
{id: 1, description: 'desc 2'}
]);
self.replaceObject = function(data, event){
var oldObject = self.displayProductData().find(function(arrayObject){
return data.id === arrayObject.id;
});
var newObject = Object.assign({}, oldObject);
newObject.description = "replace method desc";
self.displayProductData.replace(oldObject, newObject);
};
self.replaceObjectWithSplice = function(data, event){
var oldObject = self.displayProductData().find(function(arrayObject){
return data.id === arrayObject.id;
});
var newObject = Object.assign({}, oldObject);
newObject.description = "splice desc";
self.displayProductData.splice(data.id, 1, newObject);
};
};
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: displayProductData">
<li>
<span data-bind="text: id"></span>,
<span data-bind="text: description"></span>
<button data-bind="click: $parent.replaceObject">Replace</button>
<button data-bind="click: $parent.replaceObjectWithSplice">Splice</button>
</li>
</ul>
注意:如果要替换大量数据,我的答案并不是最有效的方法-每次创建新对象都需要额外的内存。
编辑:
根据评论,我将按钮移到了foreach
循环内,以显示当您从敲除对象(在本例中为displayProductData
)中调用函数时,该函数会自动获取当前行数据,以及event
。