如何清除Select2中的选定值

时间:2014-10-30 08:55:15

标签: knockout.js jquery-select2

我正在开发一个我有select元素的Web应用程序。我将它绑定到一个集合。我正在使用淘汰赛这样做。

这是我的代码:

    <select multiple class="form-control input-sm"
                                    data-bind="options: ConfigurationParameters ,optionsValue: 'Bit63', optionsText: 'DisplayText', selectedOptions: SelectedConfigParams,select2: { placeholder: 'Choose...' }"></select>

这是我的绑定处理程序:

    ko.bindingHandlers.select2 = {
init: function (element, valueAccessor) {
    var options = ko.toJS(valueAccessor()) || {};
    setTimeout(function () {
        $(element).select2(options);
    }, 0);
  },
    update: function (element, valueAccessor, allBindings) {
    console.log("update called");
}
};

我有其他选择元素都具有类似的功能。当用户选择所需信息并单击“提交”时,我将数据保存到数据库。执行此操作后,我需要清除选择框中的值。我编写了一个代码来删除&#39; SelectedConfigParams&#39;中的所有元素。但是这些值不会从select元素中删除。在图像中,您可以看到,在清除所选选项后,select元素仍显示先前选定的值。 (SelectedConfigParams是一个ko.observableArray())。

In the image you can see after clearing the selected options the select element is still showing the previously selected elements.

1 个答案:

答案 0 :(得分:4)

创建自定义绑定时,需要指定两个不同的函数:

  • init:绑定完成后调用一次。您应该使用它来添加事件处理程序,并为元素设置默认属性,应用jQuery插件......
  • update:在init之后调用它,并且每当任何使用过的可观察或计算的可观察变化时都会调用。可以通过valueAccessor访问observable,这允许您获取bindingName:之后指定的值或可观察值,或通过任何其他参数(allBindings, viewModel, bindingContext)。您应该在此函数中更新元素的状态,应用的插件等,具体取决于新的可观察值

所以,你需要做的是:

  1. 创建init函数以初始化select2
  2. 创建update函数以更改select2插件的状态
  3. 在viewmodel中创建一个observable,并使用自定义绑定将其绑定到您的元素(这将调用init,并使用observable的初始值进行更新)
  4. 修改viewmodel中的observable。执行此操作时,将调用活页夹的update功能,以便更新元素或插件的状态
  5. 有关详细信息,请参阅Knockout's custom binding docs