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,因为谷歌说视图层不应该知道模型,它应该只是“按钮”和“标签” ”。
这里的正确方法是什么?