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

public interface PersonFriend { 
    String getName(); 
} 

Tôi đang cố gắng để thực hiện một trình soạn thảo xem chỉ cho Person:GWT Danh sách biên tập ràng buộc

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

Khi tôi kết Person đối tượng để PersonViewEditor, friendsEditor không bao giờ bị ràng buộc vào danh sách bạn bè của người đó. Có vẻ như PersonFriendsViewEditor nên triển khai một số giao diện ma thuật để cho phép GWT tương tác với nó, nhưng tôi không thể tìm thấy bất kỳ tài liệu liên quan nào. Có ví dụ dynatablerf trong GWT, nhưng chúng ràng buộc trình soạn thảo danh sách của chúng một cách rõ ràng và tôi tò mò về việc ràng buộc nó như một phần của đối tượng "bên ngoài", vì vậy tôi chỉ gắn Person vào PersonViewEditor và nó có tất cả dữ liệu/bộ tất cả các tiện ích.

Mọi suy nghĩ?

Trả lời

3

PersonFriendsViewEditor nên triển khai IsEditor<ListEditor<PersonFriend, PersonFriendViewEditor>> - giải quyết được sự cố.

+3

Ngoài ra, PersonFriendsViewEditor.Driver có khả năng gây rối mọi thứ. –

Các vấn đề liên quan