如果在淘汰赛中遇到条件,我如何清除文本框并禁用它?

时间:2013-08-01 18:20:18

标签: knockout.js

有什么方法可以将以下两种方法合并到knockoutjs中吗? 代码说的是“如果勾选了collectall复选框,则禁用文本框并清除它”。

self.CollectAll.subscribe(function(CollectAll) {
    if (CollectAll) {
         self.TonalitySize('');
    }
});
self.DisableSizeLimit = ko.computed(function (){
    return self.CollectAll();
});

3 个答案:

答案 0 :(得分:3)

如果DisableSizeLimitCollectAll始终等效,那么您不需要额外的可观察数据。

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)

是的,只需坚持subscribecomputed的逻辑。只要有任何可观察到的变化,就会重新运行计算,因此它将像subscribe一样运行

self.DisableSizeLimit = ko.computed(function (){
    if(self.CollectAll())
        self.TonalitySize('');
    return self.CollectAll();
});

我不知道为什么你会想要来做这件事。将它们分开使得行为更容易看到,在功能上是等同的,并且只是更好的实践。