[英]Knockout computed observable dont eval when subscribed
I am creating a ko.computedObservable
like so: 我正在创建一个
ko.computedObservable
像这样:
var holder = ko.observable();
var makeAjax = function(){
holder('new value');
};
var result = ko.computed({
read: function () {
makeAjax();
return holder();
},
write: function (newValue) {
//not relevant
},
deferEvaluation: true
});
I would like to be able to subscribe
to result
without causing the read
function to execute. 我希望能够
subscribe
result
而不会导致执行read
功能。
result.subscribe(function(val){
console.log(val);
});
However this call to subscribe causes read
to execute. 但是,此订阅订阅导致
read
执行。 Is there any way to subscribe without causing it to execute? 有什么方法可以订阅而不会导致其执行?
What version of Knockout are you using? 您使用的是什么版本的Knockout? I can't re-create this behavior.
我无法重新创建此行为。 Here is a snippet I ran on JSbin with KO 3.0 and running it does not cause the result read function to evaluate until you call getResult()
这是我使用KO 3.0在JSbin上运行的代码段,运行该代码段不会导致结果读取函数评估,直到调用getResult()
var vm = function() {
var holder = ko.observable();
var makeAjax = function() {
holder('new value');
};
var result = ko.computed({
read: function() {
console.log('excuting read')
makeAjax();
return holder();
},
write: function(newValue) {
console.log('setting holder to ' + newValue)
//not relevant
holder(newValue)
},
deferEvaluation: true
});
result.subscribe(function(val) {
console.log(val);
});
this.getResult = function() {
return result;
}
this.setResult = function(val) {
result(val);
}
}
var VM = new vm();
ko.applyBindings(VM);
VM.setResult("test");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.