我有问题。请帮帮我。 我有ko.computed,它有一个检查ko.isObservable变量,我需要ko.computed不对这个变量的变化作出反应。 请看示例:
ko.computed(function() {
if ( ko.isObservable(test.peek()) ) {
console.log('TRUE');
}
});
-------或--------
ko.computed(function() {
if ( ko.isObservable(test).peek() ) {
console.log('TRUE');
}
});
我有错误: 无法读取属性'peek'的null
如果我这样做:
ko.computed(function() {
var testTest = ko.isObservable(test) ? test.peek() : false;
if ( testTest ) {
console.log('TRUE');
}
});
ko.computed都会对'test'的变化作出反应。
ko.computed如何对此变量的变化做出反应?
答案 0 :(得分:1)
如果你想重新计算“测试”值的变化并且不知道 - “test”是否可观察:
ko.computed(function() {
if ( ko.unwrap(test) ) {
console.log('TRUE');
}
});
另外我不太明白 - 为什么你在计算机内部使用peek()?这可以防止计算在“测试”值更改时重新计算。
我不想对“测试”值的变化作出反应:
ko.computed(function() {
var testValue = ko.isObservable(test) ? test.peek() : test;
if ( testValue ) {
console.log('TRUE');
}
});
答案 1 :(得分:0)
如果您只想要测试变量的值并且您不知道它是否是可观察的,则可以使用ko.utils.unwrapObservable来获取值。像这样:
ko.computed(function() {
var value = ko.utils.unwrapObservable(test);
});
在你的例子中,你得到了js错误,因为你试图对ko.isObservable()的结果使用peek(),对于observables是true,对于其他一切都是null。