gpt4 book ai didi

javascript - 仅当 observable 尚未在 knockout.js 中设置为某个值时才更改它

转载 作者:行者123 更新时间:2023-11-28 18:34:58 25 4
gpt4 key购买 nike

我在 Knockout.js 中有一个可观察值:

var test = ko.observable();

test({view: 'abc',model : 'newmodel'});

我想检查变量 test 是否已包含:

{view: 'abc',model : 'newmodel'}

如果没有,我想添加该条目。使用knockout.js 时如何检查这一点?

困难的部分是了解对象的详细信息。

最佳答案

您可以使用 () 检索可观察量的当前值。即:

var currentValue = test();

要检查 this 是否引用同一个对象,可以使用 === 运算符:

var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;

请注意,当您设置可观察值的值时,knockout 已经检查新值是否实际上与旧值不同。如果它们相同,knockout 不会通知任何订阅者(除非您明确告知)。

如果你想比较对象是否包含相同的键和值,你需要某种“深度比较”方法。 (How to determine equality for two JavaScript objects?)

我不确定“添加条目”是什么意思。要设置新对象,请使用:

test(newValue);

如果要将 newValue 变量中的属性添加到 test 的值中,可以使用 Object.assign ( make sure to check if your browser supports it )

var combinedValue = Object.assign(currentValue, newValue);
test(combinedValue);

Object.assign 将其所有参数的键和值映射到第一个参数对象。它会使用最新参数的值覆盖任何重复的键。

例如:

var test = ko.observable({ a: 1, b: 1 });
var newValue = { b: 2, c: 3 };
test(Object.assign(test(), newValue));

console.log(test()); // Will print: { a: 1, b: 2, c: 3 }

关于javascript - 仅当 observable 尚未在 knockout.js 中设置为某个值时才更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com