>我有一个 computedObservable,它依赖于与文本输入绑定的另一个可观察值。 像这样,其中hasValidAlmUrl
是计算可观察的:
<input type="text" data-bind="value: selectedArchive().almUrl" />
<button type="button" data-bind="enable: hasValidAlmUrl">Test</button>
我的挖空视图模型如下所示:
function ArchiveViewModel() {
var self = this;
self.selectedArchive = ko.observable(new ArchiveData());
self.hasValidAlmUrl = ko.computed(function () {
var almUrl = self.selectedArchive().almUrl();
if (typeof (almUrl) == 'undefined') return false;
return almUrl.length > 0;
}, self);
...
};
计算可观察hasValidAlmUrl
目前工作正常,但我希望它在<input>
的键下事件上更新,而不是在<input>
的焦点发生变化时更新。 我可以通过在<input>
上添加一个valueUpdate: 'afterkeydown'
来使其工作。
我不喜欢的是这些元素在一个模态中。 模式叠加的后面是填充模式中的实体所属的实体列表。 当我将<input>
设置为具有valueUpdate: 'afterkeydown'
时,您可以看到模态后面的网格随着输入值的变化而变化,我认为这看起来很糟糕。
有没有办法在它所依赖的可观察量的键关闭时进行计算的可观察更新,但在键关闭时没有相关的可观察更改?
创建一个新的可观察量来保存您的临时输入,并在某些事件(焦点、应用等)上将该值复制到原始可观察量中:
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());
};