GWT Editors framework - ListEditor, удаление элементов, нарушение MVP
public class PersonListEditor extends Composite implements IsEditor<ListEditor<Person, PersonListItemWidget>> {
private static PersonListEditorUiBinder uiBinder = GWT.create(PersonListEditorUiBinder.class);
interface PersonListEditorUiBinder extends UiBinder<Widget, PersonListEditor> {}
private class Source extends EditorSource<PersonListItemWidget> {
@Override
public PersonListItemWidget create(int index) {
PersonListItemWidget widget = new PersonListItemWidget();
panel.insert(widget, index);
return widget;
}
}
@UiField VerticalPanel panel;
private ListEditor<Person, PersonListItemWidget> editor = ListEditor.of(new Source());
public PersonListEditor() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public ListEditor<Person, PersonListItemWidget> asEditor() {
return editor;
}
}
PersonListItemWidget
имеет кнопку Удалить, и когда эта кнопка нажата, мне нужно удалить связанный элемент из списка.
я могу сделатьPersonListEditor
прослушивать уведомления виджета элемента (например, «нажата моя кнопка удаления»), но в этом случае у меня будет только ссылка на виджет, а не реальнаяPerson
объект, который мне нужен на самом деле. Я также могу добавить некоторую логику, чтобы получить индекс связанного виджета из списка элементов панели, а затем получитьPerson
объект по этому индексу, но это выглядит ужасно.
Я могу сделать мойPersonListItemWidget
бытьValueAwareEditor
поэтому каждый виджет будет знать свойPerson
, но вся идеяValueAwareEditor
Похоже, нарушение MVP для меня, так как Google говорит, что слой View не должен знать о модели, и это должны быть только «кнопки» и «метки».
Какой правильный подход здесь?