我有一个可观察的knockout.js:只有当它没有设置在knockout.js一些值更改观察到
var test = ko.observable();
test({view: 'abc',model : 'newmodel'});
我要检查,如果变量test
已经包含:
{view: 'abc',model : 'newmodel'}
如果没有,我想添加条目。如何在使用knockout.js时检查此问题?
困难的部分是了解对象的细节。
我有一个可观察的knockout.js:只有当它没有设置在knockout.js一些值更改观察到
var test = ko.observable();
test({view: 'abc',model : 'newmodel'});
我要检查,如果变量test
已经包含:
{view: 'abc',model : 'newmodel'}
如果没有,我想添加条目。如何在使用knockout.js时检查此问题?
困难的部分是了解对象的细节。
您可以使用()
检索观察值的当前值。即:
var currentValue = test();
要检查是否引用了同一个对象,你可以使用===
操作:
var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;
注意,当您设置一个可观察的价值,淘汰赛已经检查新值实际上不同从旧的一个。如果它们相同,淘汰赛将不会通知任何订户(除非您明确告知)。
如果要比较对象是否包含相同的键和值,则需要某种“深度比较”方法。 (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 }
我建议改变你的标题如“*只有在knockout.js *中没有设置为某个值时才能改变可观察性,”因为这对调试AFAICT没有任何作用。 – Jeroen