Knockout.js 更新数组元素时更新ui

Knockout.js 更新数组元素时更新ui,knockout.js,Knockout.js,我试图在数组属性更新时更新UI 我有一个颜色数组,我试图更新颜色数组中的红色,但它没有更新UI var ViewModel=function(){ this.self=这个; self.colors=ko.array([ {颜色:“红色”,测试:“aaa”}, {颜色:“蓝色”,测试:“bbb”}, {颜色:“黄色”,测试:“ccc”} ]); self.replaceIt=函数(){ const result=self.colors().filter(c=>c.color==“红色”); 结

我试图在数组属性更新时更新UI

我有一个颜色数组,我试图更新颜色数组中的红色,但它没有更新UI

var ViewModel=function(){
this.self=这个;
self.colors=ko.array([
{颜色:“红色”,测试:“aaa”},
{颜色:“蓝色”,测试:“bbb”},
{颜色:“黄色”,测试:“ccc”}
]);
self.replaceIt=函数(){
const result=self.colors().filter(c=>c.color==“红色”);
结果[0]。color=“绿色”;
对于(var i=0;i




替换它,因为在您的设置中,
color
属性本身是不可见的,
您必须使用全新的数组项更新
ObservalArray
,才能触发更改跟踪

self.colors.replace(result, { color: "green", test: result.test });
请参阅下面的工作演示

var ViewModel=function(){
this.self=这个;
self.colors=ko.array([
{颜色:“红色”,测试:“aaa”},
{颜色:“蓝色”,测试:“bbb”},
{颜色:“黄色”,测试:“ccc”}
]);
self.replaceIt=函数(){
const result=self.colors().filter(c=>c.color==“红色”)[0];
如果(结果)
{   
self.colors.replace(结果,{color:“green”,test:result.test});
}
};
};
应用绑定(新的ViewModel())




替换它
谢谢@pfx的回复,但我想知道我是否有一个像30属性这样的大对象,而不是问题中提到的两个,我只想更新一个属性,我是否应该像你在回答中那样映射所有其他29个属性,或者应该是一种动态映射它们的方法,而无需逐个编写它们one@ali我将为存储在
colors
数组中的对象创建一个viewmodel,它具有一个可观察的
color
属性。这样做,只需将
颜色
更改为绿色即可更新UI,而无需通过
替换
操作数组。这两种解决方案都会起作用,这是一个优先选择的问题。@ali另一种可能是使用它来帮助将大型dto映射/转换为淘汰视图模型