2011-10-22 74 views
6
public interface Person { 
    String getName(); 
    void setName(String name); 
    List<PersonFriend> getFriends(); 
} 

public interface PersonFriend { 
    String getName(); 
} 

我想实现一个仅查看编辑器PersonGWT列表编辑结合

public class PersonViewEditor extends Composite implements Editor<Person> { 
    private static PersonViewEditorUiBinder uiBinder = GWT.create(PersonViewEditorUiBinder.class); 
    interface PersonViewEditorUiBinder extends UiBinder<Widget, PersonViewEditor> {} 

    @UiField Label nameEditor; 
    @UiField PersonFriendsViewEditor friendsEditor; 

    @UiField FancyAnchor editAnchor; 

    public PersonViewEditor(ClientFactory clientFactory) { 
     initWidget(uiBinder.createAndBindUi(this)); 
     editAnchor.setPlace(
       clientFactory.getPlaceHistoryMapper(), 
       clientFactory.getPlaceController(), 
       new EditPersonPlace()); 
    } 
} 

public class PersonFriendsViewEditor extends Composite { 
    private static PersonFriendsViewEditorUiBinder uiBinder = GWT.create(PersonFriendsViewEditorUiBinder.class); 
    interface PersonFriendsViewEditorUiBinder extends UiBinder<Widget, PersonFriendsViewEditor> {} 

    interface Driver extends SimpleBeanEditorDriver<List<PersonFriend>, ListEditor<PersonFriend, PersonFriendViewEditor>> {} 

    private class PersonFriendViewEditorSource extends EditorSource<PersonFriendViewEditor> { 
     @Override 
     public PersonFriendViewEditor create(int index) { 
      PersonFriendViewEditor friend = new PersonFriendViewEditor(); 
      containerPanel.insert(friend, index);  
      return friend; 
     }  
    } 

    @UiField HorizontalPanel containerPanel; 

    public PersonFriendsViewEditor() { 
     initWidget(uiBinder.createAndBindUi(this));  
     Driver driver = GWT.create(Driver.class); 
     ListEditor<PersonFriend, PersonFriendViewEditor> editor = ListEditor.of(new PersonFriendViewEditorSource()); 
     driver.initialize(editor); 
    } 
} 

当我Person对象绑定到PersonViewEditorfriendsEditor永远不会绑定到人的朋友列表。它看起来像PersonFriendsViewEditor应该实现一些神奇的界面,以允许GWT与它交互,但我找不到任何相关的文档。 GWT中有dynatablerf示例,但它们明确地绑定了它们的列表编辑器,并且我很好奇它将它绑定为“外部”对象的一部分,所以我只绑定PersonPersonViewEditor并且它具有所有数据/集所有的小部件。

有什么想法?

回答

3

PersonFriendsViewEditor应执行IsEditor<ListEditor<PersonFriend, PersonFriendViewEditor>> - 解决了问题。

+3

此外,PersonFriendsViewEditor.Driver可能会搞砸了。 –