gpt4 book ai didi

javascript - knockout 计算的可观察量在订阅时不会评估

转载 作者:行者123 更新时间:2023-12-03 11:13:10 26 4
gpt4 key购买 nike

我正在创建一个ko.compulatedObservable,如下所示:

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
});

我希望能够订阅结果而不导致执行read函数。

result.subscribe(function(val){
console.log(val);
});

但是,此订阅调用会导致 read 执行。有什么方法可以订阅而不导致其执行吗?

最佳答案

您使用的是哪个版本的 Knockout?我无法重新创建这种行为。这是我在 JSbin 上运行的片段使用 KO 3.0 并运行它不会导致结果读取函数评估,直到您调用 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");

关于javascript - knockout 计算的可观察量在订阅时不会评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com