Директива Angular UI select2 - обновление модели программно не отражается на виджете

Я пытаюсь программно обновить модель select2 и обновить представление, но, похоже, это не работает.

Вот пример плунжера из проекта пользовательского интерфейса Angular: http://plnkr.co/edit/kQROgr?p=preview

Я попытался добавить initSelection() в соответствии с документами select2 (http://ivaynberg.github.com/select2/ "Реакция на внешние изменения значения"), но это не сработало. Я также пробовал с select2 3.3.2, и это тоже не помогло.

Есть две проблемы: 1) Нажмите «Обновить модель», модель обновится, но не добавит тег в виджет select2. Также 2) Нажмите «Update-Model», а затем используйте select2, чтобы выбрать второй тег, первый тег, добавленный «Update-Model», исчезнет.


person jonathan    schedule 03.04.2013    source источник
comment
Это может помочь? github.com/angular-ui/angular-ui/issues/455   -  person DanB    schedule 05.04.2013
comment
Удалось ли вам заставить это работать. Я сталкиваюсь с той же проблемой.   -  person testing123    schedule 29.05.2013
comment
Argh, я попробовал это в старом колледже ... Я знаю, что это работает для записи, потому что я использую его во всем приложении, которое я создаю, и я все время подталкиваю внешние данные к модальному, и он обновляет select2, поэтому я тут наверняка что-то другое...   -  person btm1    schedule 13.10.2013
comment
@jonathan, у меня такая же проблема. Что общего между вашим сценарием и моим, так это то, что список источников, похоже, меняется. В вашем случае он изменяется в методе «запрос», указанном в «параметрах». В моем случае я применяю серию фильтров angularjs, используя '|' в «ng-repeat». Я думаю, что это сравнение ссылок на объекты должно быть неудачным. Напишите сюда, если у вас есть какие-либо обновления по этому поводу.   -  person Faredoon    schedule 16.10.2013
comment
Привет, Джонатан, можешь дать скрипку?   -  person Sushrut    schedule 13.01.2014


Ответы (1)


Я знаю, что вопрос немного устарел, но эй ... Я нашел его и не знал ответа.

Мне удалось сделать то, что я хотел, настроив модель, а затем вызвав initSelection() в конфигурации select2Options.

Итак, моя конфигурация была такой:

$scope.select2Options = {
allowClear: true
minimumInputLength: 3
quietMillis: 1000
initSelection: ->
  $scope.property
query: (query)->
  Properties.query({q: query.term}, (response)->
    data = {results: processData(response['properties'])}
    query.callback(data)
    )

  processData = (data)->
    results = []
    angular.forEach(data, (item, index)->
      results.push(item)
      )
    return results

}

Затем у меня был модальный возврат вновь созданного объекта следующим образом:

modalInstance.result.then((result)->
    $scope.property = result
    $scope.select2Options.initSelection()
  )

По сути, после того, как он обновил модель, мне пришлось вручную повторно инициализировать виджет select2. Я думаю, что это можно было бы обработать с помощью $scope.$watch, если вы действительно этого хотите, но это, вероятно, было бы пустой тратой времени, если только у вас нет обновления свойства из нескольких мест или чего-то еще.

person Tyrone Wilson    schedule 15.05.2014