Как наблюдать изменения в списках глазурованных в гриффоне?
У меня есть приложение 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
для того, чтобы адаптировать изменения списка к размеру списка.