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

public interface PersonFriend { 
    String getName(); 
} 

Estoy tratando de poner en práctica una vista de sólo editor para Person:editor de la lista GWT vinculante

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

Cuando Ato Person objeto a PersonViewEditor, friendsEditor no está ligada a la lista de amigos de la persona. Parece que PersonFriendsViewEditor debería implementar alguna interfaz mágica para permitir que GWT interactúe con ella, pero no puedo encontrar ningún documento relacionado. Hay un ejemplo dinámico en GWT, pero vinculan explícitamente su editor de listas y tengo curiosidad por vincularlo como parte del objeto "externo", así que solo ato Person a PersonViewEditor y tiene todos los datos/establece todos los widgets.

¿Alguna idea?

Respuesta

3

PersonFriendsViewEditor debería implementar IsEditor<ListEditor<PersonFriend, PersonFriendViewEditor>> - eso resolvió el problema.

+3

Además, PersonFriendsViewEditor.Driver es probable que estropee las cosas. –

Cuestiones relacionadas