Knockout JS - 有什么聪明的方法可以在不可见时清除价值?

Knockout JS - Any smart way to clear value when not visible?

我知道我可以检查 USDteUnk() 的值,然后硬编码 ViewModel.USDte("") 以清除该值。

但是,我想知道,有没有一种聪明的方法可以在元素不可见时清除该值?即,当 Unsure [USDteUnk] 选中时,清除 [USDte]?

<div class="form-group">
  <label for="USDte">4.1 Date of first scan?</label>
  <div id="USDteBox" data-bind="visible: USDteUnk() === '0' || USDteUnk() === ''">
    <input type="text" name="USDte" id="USDte" class="form-control" placeholder="dd/mm/yyyy" data-bind="value: USDte">
  </div>
  <div class="btn-group" data-toggle="buttons">
    <label class="btn btn-blue">
      <input type="checkbox" class="form-control" name="USDteUnk" id="USDteUnk" data-bind="bsChecked: USDteUnk"> Unsure
    </label>
  </div>
</div>

以下是处理程序 bsChecked,因为我使用 bootstrap 按钮组,原来的 Checked 处理程序不起作用。

ko.bindingHandlers.bsChecked = {
            init: function (element, valueAccessor, allBindingsAccessor,
            viewModel, bindingContext) {
                var value = valueAccessor();
                if (ko.unwrap(value)==='-1')
                    $(element).closest('.btn').button('toggle');

                var newValueAccessor = function () {
                    return {
                        change: function () {
                            value(element.checked?'-1':'');
                        }
                    }
                };
                ko.bindingHandlers.event.init(element, newValueAccessor,
                allBindingsAccessor, viewModel, bindingContext);
            },
            update: function (element, valueAccessor, allBindingsAccessor,
            viewModel, bindingContext) {
                if ($(element).val() == ko.unwrap(valueAccessor()) && !$(element).prop('checked')) {
                    $(element).closest('.btn').button('toggle');
                }
            }
        }

基于 @Tomalak 的回答

            ko.applyBindings(VM);
            VM.OtherDetail().USDteUnk.subscribe(function (newValue) {
                if (newValue === '-1') {
                    VM.OtherDetail().USDte('');
                }
            });

is there a smart way to clear the value when an element is not visible? I.e., when Unsure [USDteUnk] checked, clear [USDte]?

是的,通过 subscription

self.USDteUnk.subscribe(function (checked) {
    if (checked) self.USDte("");
});

显示USDte值的元素是否可见完全无关。