2014-10-30 79 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