我有以下ko select2
绑定:
ko.bindingHandlers.select2 = {
init: function (element, valueAccessor) {
$(element).select2(valueAccessor());
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).select2('destroy');
});
}
};
以下是我的input
与select2绑定:
<input type="text" class="form-control" data-bind="value: $root.Name, attr: { 'placeholder': 'Full Name' }, select2: { minimumInputLength: 1, query: $root.list_item, allowClear: true, multiple: true}">
一切都很好。我面临的问题是当我通过Name
按钮清除Clear
可观察量时,select2
div选择的值不会被清除。在select2
ko绑定中我需要做些什么更改才能在清除observable时反映UI中的更改?
答案 0 :(得分:1)
清除Name
后,knockout也会清除输入元素的value
属性。
select2
插件不会跟踪此内容并且不会更新其内部值。一种解决方案是,在自定义绑定处理程序中,订阅值绑定并在值为空时清除select2
:
ko.bindingHandlers.select2 = {
init: function (element, valueAccessor, allBindings) {
$(element).select2(valueAccessor());
// if a value binding exists, subscribe to it
// to clear the select2 plugin when the value is empty
var valueBindingAccessor = allBindings.get('value');
if(valueBindingAccessor) {
valueBindingAccessor.subscribe(function(val) {
if(val == '') {
$(element).select2("val", "");
}
});
}
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).select2('destroy');
});
}
};