2016-05-17 39 views
0

我有一个可观察的knockout.js:只有当它没有设置在knockout.js一些值更改观察到

var test = ko.observable(); 

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

我要检查,如果变量test已经包含:

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

如果没有,我想添加条目。如何在使用knockout.js时检查此问题?

困难的部分是了解对象的细节。

+1

我建议改变你的标题如“*只有在knockout.js *中没有设置为某个值时才能改变可观察性,”因为这对调试AFAICT没有任何作用。 – Jeroen

回答

3

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

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.assignmake 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 } 
相关问题