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

public interface PersonFriend { 
    String getName(); 
} 

Sto cercando di implementare una sola visualizzazione editore per Person:GWT List Editor vincolante

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); 
    } 
} 

Quando mi legano Person oggetto da PersonViewEditor, friendsEditor non è mai legato alla lista degli amici della persona. Sembra che PersonFriendsViewEditor debba implementare qualche interfaccia magica per consentire a GWT di interagire con esso, ma non riesco a trovare alcun documento correlato. C'è un esempio di dynatablerf in GWT, ma essi legano esplicitamente il loro editor di liste e sono curioso di legarlo come parte dell'oggetto "esterno", quindi lego solo Person a PersonViewEditor e ha tutti i dati/set di tutti i widget.

Qualche idea?

risposta

3

PersonFriendsViewEditor dovrebbe implementare IsEditor<ListEditor<PersonFriend, PersonFriendViewEditor>> - che ha risolto il problema.

+3

Inoltre, PersonFriendsViewEditor.Driver potrebbe rovinare le cose. –