javascript - 在 Knockout 中为变量设置值的最短方法

标签 javascript knockout.js observable

在 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/

相关文章:

javascript - Webpack 附带运行时意味着什么?

JavaScript 函数作用域

javascript - 从对象内部的对象获取数据

javascript - 如何获取 knockoutjs 可观察数组的下一个元素?

angularjs - 通过服务进行 Angular 2 组件交互

javascript - 我如何在 DOM 中找到 "refresh"元素?

javascript - 如何设置模型的加载顺序以避免关系错误?

jquery - knockoutjs 数据绑定(bind)问题

javascript - KnockoutJS SEO 友好吗

javascript - 没有 RxJS 的异步流控制