2014-10-30 3 views
2

Я работаю над веб-приложением, где у меня есть элемент select. Я привязываю его к коллекции. Я делаю это, используя нокаут.Как очистить выбранные значения в 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. На изображении вы можете видеть, что после очистки выбранных параметров элемент выбора все еще показывает предыдущие выбранные значения. (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? Пожалуйста, добавьте еще код, и в идеале, также скрипку. По крайней мере, HTML, jQuery's select2 (или объяснение того, что он делает), модель и вызов applyBindings. если нет, то это не поможет вам – JotaBe

+0

@JotaBe Пожалуйста, просмотрите эту ссылку. http://ivaynberg.github.io/select2/ И это мое первое веб-приложение (новое для нокаута). – Raj123

+0

Вся необходимая информация необходима для ответа на ваш вопрос. Пожалуйста, добавьте его на свой вопрос, или он, вероятно, будет закрыт как «непонятный, что вы просите». Не добавляйте эту информацию в качестве комментария – JotaBe

ответ

4

Whe создать пользовательскую привязку необходимо указать две различные функции:

  • INIT: это называется один раз, когда связывание выполняется. Вы должны использовать его для добавления обработчиков событий и установки атрибутов по умолчанию для элемента, применять плагины jQuery ...
  • update: это вызывается после init и всякий раз, когда используются любые наблюдаемые или вычисленные наблюдаемые изменения. Доступ к наблюдаемым может быть получен через valueAccessor, что позволяет получить значение или наблюдаемое значение, указанное после bindingName:, или через любой из других параметров (allBindings, viewModel, bindingContext). Вы должны обновить состояние элемента, примененные плагины и так далее в этой функции, в зависимости от новых наблюдаемых значений

Итак, что вам нужно сделать, это:

  1. Создать функцию init для инициализации select2
  2. Создать функцию update изменить состояние select2 плагина
  3. создания наблюдаемого в вашей ViewModel и привязать его к элементу с помощью пользовательских связывания (это кал l init и обновить с начальным значением наблюдаемого)
  4. Измените наблюдаемое в вашей модели. Когда вы сделаете это, то update функции вашего вяжущего будет называться, так что состояние вашего элемента или плагин может быть обновлен

Пожалуйста, смотрите Knockout's custom binding docs для получения дополнительной информации.

+0

Я обновил bindHandler в вопросе. Обновление не вызывается каждый раз, когда изменяется коллекция «SelectedConfigParams».Из того, что вы сказали, обновление нужно вызывать каждый раз, когда моя выбранная коллекция вариантов изменяется правильно? – Raj123

+0

Thankyou. Я понял. – Raj123

Смежные вопросы