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
监听item widget的通知(比如“我的删除按钮被点击了”),但是在这种情况下,我只有对widget的引用,而不是实际需要的Person
对象。我还可以添加一些逻辑来从面板项列表中获取相关widget的索引,然后通过该索引获取Person
对象,但这看起来很糟糕。我可以让我的
PersonListItemWidget
成为ValueAwareEditor
,这样每个小部件都会知道它的Person
,但整个ValueAwareEditor
的想法对我来说似乎违反了MVP原则,因为Google表示View层不应该知道模型,它应该只是“按钮”和“标签”。
这里应该采取什么正确的方法呢?