在 Knockout 中,我有可观察的变量位置
。它的类型是LocationEdit
。该 viewModel 有可观察的但没有字段。
我有字段名称的集合:fields
。对于每个字段,我想重置位置
fields.forEach(field => {
if (this.uniqueField(locs, field)) {
if (ko.isObservable(this.location()[field])) {
this.location()[field](locs[0][field]);
} else {
this.location()[field] = locs[0][field];
}
}
});
为了使此代码更简单(删除 if 子句),我可以以某种方式在一行中将值设置为 this.location()[field]
吗?
最佳答案
您可以使用条件运算符 (... ? ... : ... ;
),尽管它没有太大变化:
fields.forEach(field => {
if (this.uniqueField(locs, field)) {
ko.isObservable(this.location()[field]) ? this.location()[field](locs[0][field]) : this.location()[field] = locs[0][field];
}
});
或者你可以编写一个函数:
function upd(arr, index, val) {
ko.isObservable(arr[index]) ? arr[index](val) : arr[index] = val;
}
用法:
fields.forEach(field => {
if (this.uniqueField(locs, field)) {
upd(this.location(), field, locs[0][field]);
}
});
参见demo 。
您甚至可以将此函数添加到 ko
中:
if(typeof ko.updatePotentialObservable == 'undefined')
ko.updatePotentialObservable = function (arr[index], val) {
ko.isObservable(obj) ? arr[index](val) : arr[index]= val;
}
用法:
fields.forEach(field => {
if (this.uniqueField(locs, field)) {
ko.updatePotentialObservable(this.location(), field, locs[0][field]);
}
});
查看其他 demo
关于javascript - 在 Knockout 中为变量设置值的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42484079/