динамически заполнить поле со списком в приложении Griffon - PullRequest
1 голос
/ 21 февраля 2010

У меня есть 2 комбинированных списка в моем приложении View of Griffon (или groovy swingBuilder)

country = comboBox(items:country(), selectedItem: bind(target:model, 'country', 
            value:model.country), actionPerformed: controller.getStates)

state = comboBox(items:bind(source:model, sourceProperty:'states'), 
                   selectedItem: bind(target:model, 'state', value:model.state))

Функция getStates () в контроллере заполняет @Bindable List states = [] в модели на основе выбранной страны.

Приведенный выше код не выдает никаких ошибок, но состояния никогда не заполняются.

Я изменил состояние с List на объект диапазона (dummy), это выдает ошибку MissingPropertyException Нет таких элементов свойств для класса java.swing.JComboBox.

Я что-то здесь упускаю? На Nabble есть несколько записей, связанных с этим, но ничего не ясно. Приведенный выше код работает, если у меня есть метка вместо второго поля со списком.

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

Модель:

    @Bindable String country = ""
    EventList statesList = new BasicEventList()

Контроллер:

    def showStates = { evt = null ->
    model.statesList.clear()
    def states = []
    if(model.country == "US") 
                 states = ["CA","TX", "CO", "VA"]
    else if(model.country == "Canada")
         states =  ["BC", "AL"]
    else
          states = ["None"]

    edt {model.statesList.addAll(states.collect{it})}
    }

Вид:

    def createComboBoxStatesModel() { 
                   new EventComboBoxModel(model.daysList) }

    comboBox( items:["USA","Canada","other"], selectedItem: bind(target:model, 'country', value: model.country), actionPerformed : controller.showStates)

    comboBox( model: createComboBoxStatesModel(), selectedItem: bind(target:model, 'state', value:model.state))
2 голосов
/ 22 февраля 2010

Я считаю, что свойство items: не наблюдается и используется только во время сборки узла. Вы можете добиться лучших результатов, установив привязку к модели или используя EventList из GlazedLists.

...