Knockout.js 值更新键控上的计算可观测值,但不更新它所依赖的可观测值

Knockout.js 值更新键控上的计算可观测值,但不更新它所依赖的可观测值,knockout.js,Knockout.js,我有一个computedObservable,它依赖于与文本输入相关的另一个observable的值。与此类似,其中,hasValidAlmUrl是计算出的可观测值: <input type="text" data-bind="value: selectedArchive().almUrl" /> <button type="button" data-bind="enable: hasValidAlmUrl">Test</button> self.tmpAl

我有一个computedObservable,它依赖于与文本输入相关的另一个observable的值。与此类似,其中,
hasValidAlmUrl
是计算出的可观测值:

<input type="text" data-bind="value: selectedArchive().almUrl" />
<button type="button" data-bind="enable: hasValidAlmUrl">Test</button>
self.tmpAlmUrl = ko.observable(); // bind your input to this
self.hasValidAlmUrl = ko.computed(function () {
     return (typeof (self.tmpAlmUrl()) !== 'undefined') && self.tmpAlmUrl().length;
});

// call when about to show the modal
self.onDisplayModal = function () {
    self.tmpAlmUrl(self.selectedArchive().almUrl();
});

// call when you want to "apply" the new url
self.onApplyChanges = function () {
    self.selectedArchive.almUrl(self.tmpAlmUrl());
};
当前,
hasValidAlmUrl
computedObservable工作正常,但我希望它在
的按键事件上更新,而不是在
的焦点改变时更新。我可以通过在
上添加
valueUpdate:'afterkeydown'
来实现这一点

我不喜欢的是这些元素处于模态中。模式覆盖后面是一个实体列表,填充模式中的实体是其中的一部分。当我将
设置为具有
值更新:“afterkeydown”
时,您可以看到模式后面的网格随着输入值的变化而变化,我认为这看起来很糟糕


是否有任何方法可以在其依赖的可观察对象的按键下进行计算的可观察更新,但在按键下不进行依赖的可观察更改?

创建一个新的可观察对象以保存临时输入,并在某些事件(聚焦、应用等)中将该值复制到原始可观察对象中:

<input type="text" data-bind="value: selectedArchive().almUrl" />
<button type="button" data-bind="enable: hasValidAlmUrl">Test</button>
self.tmpAlmUrl = ko.observable(); // bind your input to this
self.hasValidAlmUrl = ko.computed(function () {
     return (typeof (self.tmpAlmUrl()) !== 'undefined') && self.tmpAlmUrl().length;
});

// call when about to show the modal
self.onDisplayModal = function () {
    self.tmpAlmUrl(self.selectedArchive().almUrl();
});

// call when you want to "apply" the new url
self.onApplyChanges = function () {
    self.selectedArchive.almUrl(self.tmpAlmUrl());
};