只有在 knockout.js 中尚未设置某个值时才更改 observable
Only change observable if it's not already set to some value in knockout.js
我在 knockout.js 中有一个 observable:
var test = ko.observable();
test({view: 'abc',model : 'newmodel'});
我想检查变量 test
是否已经包含:
{view: 'abc',model : 'newmodel'}
如果没有,我想添加条目。使用 knockout.js 时如何检查?
困难的部分是了解对象的详细信息。
您可以使用 ()
检索 observable 的当前值。即:
var currentValue = test();
要检查 this 是否引用同一个对象,您可以使用 ===
运算符:
var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;
请注意,当您设置一个 observable 的值时,knockout 已经检查新值是否真的与旧值不同。如果它们相同,knockout 将不会通知任何订阅者(除非您明确告知)。
如果要比较对象是否包含相同的键和值,则需要某种 "deep compare" 方法。 (How to determine equality for two JavaScript objects?)
我不确定 "add the entry" 是什么意思。要设置新对象,请使用:
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 }
我在 knockout.js 中有一个 observable:
var test = ko.observable();
test({view: 'abc',model : 'newmodel'});
我想检查变量 test
是否已经包含:
{view: 'abc',model : 'newmodel'}
如果没有,我想添加条目。使用 knockout.js 时如何检查?
困难的部分是了解对象的详细信息。
您可以使用 ()
检索 observable 的当前值。即:
var currentValue = test();
要检查 this 是否引用同一个对象,您可以使用 ===
运算符:
var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;
请注意,当您设置一个 observable 的值时,knockout 已经检查新值是否真的与旧值不同。如果它们相同,knockout 将不会通知任何订阅者(除非您明确告知)。
如果要比较对象是否包含相同的键和值,则需要某种 "deep compare" 方法。 (How to determine equality for two JavaScript objects?)
我不确定 "add the entry" 是什么意思。要设置新对象,请使用:
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 }