Knoucktout.js 可见绑定中的 Select2 只显示不隐藏

Posted

技术标签:

【中文标题】Knoucktout.js 可见绑定中的 Select2 只显示不隐藏【英文标题】:Select2 in Knoucktout.js visible binding only shows but does not hide 【发布时间】:2014-09-09 06:09:25 【问题描述】:

我将 select 2 与 knockout.js 一起使用

我想显示和隐藏一个项目是否被选中的控件。为此,我将可见属性绑定到模型上的 isSelected 可观察属性。

最初选择 2 是不可见的。当项目变为isSelected = true 时,框会显示并且可见。到目前为止一切正常。

但是当isSelected变为false时,我仍然可以看到控件。它不会消失。相同属性上的其他控件确实可以正常工作并正确隐藏和显示,因此我确定该属性设置正确。

这是我的绑定

<select class="input-xlarge" 
        data-bind="visible: isSelected(), options: stations(), 
                   optionsValue: 'Id', optionsText: 'Name',
                   value:StationdId(), selectedOptions:selectedStations, 
                   select2:  formatResult: $root.formatStationDropDown,
                              minimumInputLength: 3, quietMillis: 200, 
                              maximumSelectionSize: 1, allowClear:true ">
</select>

我认为这与 select2 正在创建的包装元素有关?

作为一种解决方法,我可以添加一个包装元素并隐藏它,但对我来说这味道...

<div data-bind="visible: isSelected()">
   <select ....>
</div>

对如何正确执行此操作有任何建议吗?

还有我的绑定处理程序:

ko.bindingHandlers.select2 = 
    init: function (el, valueAccessor, allBindingsAccessor, viewModel) 
        ko.utils.domNodeDisposal.addDisposeCallback(el, function () 
            $(el).select2('destroy');
        );

        var allBindings = allBindingsAccessor(),
            select2 = ko.utils.unwrapObservable(allBindings.select2);
        $(el).select2(select2);
    ,
    update: function (el, valueAccessor, allBindingsAccessor, viewModel) 

        if (typeof el !== 'undefined') 

            var allBindings = allBindingsAccessor();

            if (allBindings.options.length > 0) 
                select2 = ko.utils.unwrapObservable(allBindings.select2);

                $(el).select2(select2);

                var value = allBindings.value;
                $(el).select2("val", value);

            
        
    

;

【问题讨论】:

您的select2 绑定处理程序是什么样的? 我在帖子中添加了绑定处理程序代码 【参考方案1】:

您说得对,visible 绑定没有应用于生成的 select2 包装器,而是应用于原始的 &lt;select&gt; 元素(在生成 select2 后以 size=0 呈现)。

您可以使用无容器if 绑定:

<!-- ko if: isSelected -->
   <select ....>
<!-- /ko -->

【讨论】:

ok 看起来比使用虚拟 div 标签更好。我试试看

以上是关于Knoucktout.js 可见绑定中的 Select2 只显示不隐藏的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WPF 中的代码绑定 DataGridTextColumn 的可见性属性?

将 Button 的可见性绑定到 ViewModel 中的 bool 值

R CMD检查中的全局变量注释没有可见的绑定

将 Bool 绑定到 ListBox 中 TextBlock 的可见性

dplyr 。和 _no 对全局变量 '.' 的可见绑定 _ 包检查中的注意事项

应用公式,然后自动填充数据,直到列中的最后一个可见单元格:VBA