Обновление полей со списком Griffon JavaFX

Я пытаюсь обновить содержимое поля со списком (используя Griffon 1.2.0 с плагином JavaFX).

Моя модель:

class MyModel {
    List monthList = FXCollections.observableList([new DateMidnight()])

    def convertDate = [
            fromString: { String s ->
                return new DateMidnight(DateTimeFormat.forPattern("yyyy-MM").parseDateTime(s))
            },
            toString: { DateMidnight d ->
                return "2011-10"
            }
    ] as StringConverter
}

Мое представление содержит:

comboBox(items: (model.monthList), converter: model.convertDate)

Теперь у меня есть действие контроллера, которое вызывается при нажатии кнопки:

def load = {
        execInsideUIAsync {
            def months = myService.buildMonthList()
            model.monthList.addAll(months)
        }
} 

Проблема в том, что содержимое поля со списком никогда не меняется. Может ли кто-нибудь помочь мне понять, что мне не хватает?

Документации по ComboBox пока нет http://groovyfx.org/docs/guide/single.html#choiceBoxComboBox

Кроме того, правильно ли я реализовал конвертер?


person prule    schedule 23.02.2013    source источник


Ответы (1)


Проблема в том, что GroovyFX.comboBox создает новый список вместо того, чтобы использовать тот, который вы передаете в качестве аргумента для элементов: эта проблема возникает и с tableView. Временным обходным путем будет установка свойства элементов напрямую, например

 comboBox(id: 'combo')
 noparent { combo.items = model.monthList }
person Andres Almiray    schedule 23.02.2013
comment
К сожалению, это не сработало для меня. Я определил свое поле со списком: comboBox(id: 'months', convertor: model.convertDate), а затем использовал блок noparent: noparent {months.items = model.monthList, а затем в моем контроллере я обновляю модель model.monthList. clear() model.monthList.addAll(months), но вид никогда не меняется. Единственный способ, которым я когда-либо мог манипулировать полем со списком, - это напрямую обращаться к view.months.items и очищать/заполнять его напрямую. Не идеально. - person prule; 24.02.2013
comment
Хм, может быть проблема с потоками? Я запустил код с Griffon 1.2.0 и groovyfx/javafx 0.8. Подробнее см. gist.github.com/aalmiray/5023272. Руководство также подробно описывает @Threading griffon.codehaus.org/guide/ последняя/руководство/ - person Andres Almiray; 24.02.2013
comment
Хех, я создал новое приложение, чтобы попробовать ваш пример, и оно отлично работает. Но я все еще не могу заставить его работать в моем существующем приложении. Когда у меня будет время, я постараюсь заставить его работать должным образом. Спасибо за вашу помощь. - person prule; 25.02.2013