2014-10-30 428 views
2

我正在使用具有select元素的Web应用程序。我将它绑定到一个集合。我正在使用淘汰赛做到这一点。如何清除Select2中的选定值

这里是我的代码:

<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"); 
} 
}; 

我还有其他的选择要素都具有类似的功能。当用户选择需要的信息并单击提交时,我将数据保存到数据库。这样做后,我需要清除选择框中的值。我写了一个代码来删除'SelectedConfigParams'中的所有元素。但是这些值不会从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.

+0

什么是jQuery的select2?请添加更多代码,理想情况下也是一个小提琴。至少是HTML,jQuery的select2(或者它的解释),模型,以及对applyBindings的调用。如果没有,它不可能帮助你 – JotaBe 2014-10-30 09:20:21

+0

@JotaBe请看这个链接。 http://ivaynberg.github.io/select2/ 这是我的第一个Web应用程序(也是Knockout的新手)。 – Raj123 2014-10-30 09:25:31

+0

所有需要的信息都需要回答你的问题。请将其添加到您的问题中,否则它可能会因“不清楚您要求的内容”而被关闭。不要将此信息添加为注释 – JotaBe 2014-10-30 09:37:49

回答

4

WHE您创建一个自定义绑定,您需要指定两种不同的功能:

  • INIT:这就是所谓的一次,当绑定完成。您应该使用它来添加事件处理程序,并为元素设置默认属性,应用jQuery插件...
  • 更新:这是在init之后调用的,并且每当使用任何使用的observable或computed observable发生更改时。可以通过valueAccessor访问观测值,该观测值允许您获取在bindingName:之后或通过任何其他参数(allBindings, viewModel, bindingContext)指定的值或可观察值。你应该更新元素的状态下,应用插件等在此功能,这取决于新观察到的值

所以,你需要做的是:

  1. 创建init功能初始化select2
  2. 创建update功能改变select2插件
  3. 的状态,您的视图模型创建一个可观察到的,并使用您的自定义绑定绑定到你的元素(这将CAL l初始化,并用可观察值的初始值更新)
  4. 修改viewmodel中的observable。当你这样做,你的粘结剂的update函数将被调用,这样你的元素或插件的状态可以被更新

请参阅Knockout's custom binding docs获取更多信息。

+0

我已更新问题中的bindingHandler。每次更改“SelectedConfigParams”集合时都不会调用更新。从你说的话来说,每次我选择的选项集合发生变化时都应该调用update? – Raj123 2014-10-30 11:09:56

+0

谢谢。我知道了。 – Raj123 2014-10-30 12:38:34