Как наблюдать изменения в списках глазурованных в гриффоне?

У меня есть приложение griffon 1.5 с glazedlist, из которого я пытаюсь наблюдать изменения и привязывать его размер () к полю в представлении.

в моей модели у меня есть

@Bindable timeslotPicks = 0

@Bindable
@PropertyListener (tableChanged) EventList<ProductionLineEntry> table =
        new BasicEventList<ProductionLineEntry>()  ....

.. а также

def tableChanged = {evt->
    println "table Changed ... "
    setTimeslotPicks(table.size())
}

Увы, событие tableChanged не запускается. Как я могу привязать поле просмотра к текущему размеру моего остекленного списка? Заранее спасибо..

2 ответа

Решение

Я перенастроил свою модель..

EventList<ProductionLineEntry> table =
        new BasicEventList<ProductionLineEntry>()
...

и удалил мою проверенную таблицу..

В моем методе контроллера mvcInit я добавил..

 // Add a listener to my list ..
    model.table.addListEventListener(
       {e-> model.timeslotPicks = model.table.size()} as ListEventListener
    )

Теперь это работает прекрасно..

Спасибо

Проблема в том, что вы наблюдаете изменения, внесенные в table поле, а не содержимое table поле, как вы ожидаете. Другими словами, код, который вы написали (tableChanged закрытие) реагирует, когда bean.table обновляется, например, когда новый EventList назначен на это поле.

Вы должны написать ListChangeListener для того, чтобы адаптировать изменения списка к размеру списка.

Другие вопросы по тегам