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
值的元素是否可见完全无关。
我知道我可以检查 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
值的元素是否可见完全无关。