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 говорит, что слой просмотра не должен знать о модели, и это должны быть только «кнопки». " и "метки".
Какой здесь правильный подход?