有什么方法可以将以下两种方法合并到knockoutjs中吗? 代码说的是“如果勾选了collectall复选框,则禁用文本框并清除它”。
self.CollectAll.subscribe(function(CollectAll) {
if (CollectAll) {
self.TonalitySize('');
}
});
self.DisableSizeLimit = ko.computed(function (){
return self.CollectAll();
});
答案 0 :(得分:3)
如果DisableSizeLimit
和CollectAll
始终等效,那么您不需要额外的可观察数据。
self.CollectAll = ko.observable();
self.TonalitySize = ko.observable();
self.CollectAll.subscribe(function(CollectAll) {
if (CollectAll) {
self.TonalitySize('');
}
});
您只需绑定CollectAll
即可停用文本框。
<input data-bind="value: TonalitySize, disable: CollectAll" />
答案 1 :(得分:0)
// add a computed property for the value you want to display.
self.TonalitySizeDisplay = ko.computed({
read: function () { return self.CollectAll() ? "" : self.TonalitySize(); },
write: self.TonalitySize
});
self.DisableSizeLimit = ko.computed(self.CollectAll);
// bind to the display property
<textarea data-bind="value: TonalitySizeDisplay, enable: !DisableSizeLimit()" />
答案 2 :(得分:0)
是的,只需坚持subscribe
中computed
的逻辑。只要有任何可观察到的变化,就会重新运行计算,因此它将像subscribe
一样运行
self.DisableSizeLimit = ko.computed(function (){
if(self.CollectAll())
self.TonalitySize('');
return self.CollectAll();
});
我不知道为什么你会想要来做这件事。将它们分开使得行为更容易看到,在功能上是等同的,并且只是更好的实践。