2011-08-01 32 views
8

Tôi có một số CellTree sử dụng MultiSelectionModel với CheckboxCells như một phần của ô composite. Điều đó dường như đang hoạt động.Lựa chọn GWT CellTree

Điều tôi thực sự cố gắng làm là tạo các tab trong giao diện của tôi cho từng mục có thể được chọn trong cây. Nghe có vẻ tầm thường, nhưng tôi bị bối rối như thế nào để có được MyData trên một lựa chọn Thay đổi. Các mục cần giữ nguyên được chọn để nếu tôi bỏ chọn chúng sau này, các tab này sẽ bị xóa một lần nữa.

Tôi cần có được MyData cho mục vừa được chọn để biết nội dung của tab nên là gì.

 final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 

     } 
    }); 

Tôi cảm thấy mình hoàn toàn mất tích rõ ràng. Tất cả những gì tôi có thể làm trong sự kiện selectionChange là để thẩm vấn trình xử lý lựa chọn của tôi để xem tập hợp đã chọn là gì. Có cách nào tôi có thể đính kèm một người nghe vào một lựa chọn cây cụ thể thay vì một cái toàn cầu, "một cái gì đó đã thay đổi" người nghe.

Mọi gợi ý sẽ được đánh giá cao.

Trả lời

2

Bạn phải truy cập getSelectedSet() trên số lựa chọnMô hình để nhận các mục đã chọn trong CellTree của bạn. Thật không may có vẻ như bây giờ là cách để có được mục được chọn cuối cùng (như trong SingleSelectionModel).

final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 
       Set<TableLight> selectedItems = selectionModel.getSelectedSet(); 
     } 
    }); 
+1

Vâng, điều đó thực sự hút rõ ràng rằng thông tin được biết đến trong nội bộ. Tôi nghĩ có lẽ sẽ có một cách khác. Những gì tôi đã phải làm là lấy tập hợp đã chọn, sau đó tìm thấy sự khác biệt thiết lập để thêm/xóa các tab. – dpwr

4

Ok, đối với bất kỳ ai tìm thấy điều này sau, có cách!

Khi bạn thêm CheckboxCell vào CompositeCell, bạn có thể chỉ định FieldUpdater được trả về được gọi khi trường được thay đổi.

  hasCells.add(new HasCell<TableLight, Boolean>() { 

      // Cell containing checkbox 
      private Cell cell = new CheckboxCell(true, false); 

      public Cell<Boolean> getCell() { 
       return cell; 
      } 

      public FieldUpdater<TableLight, Boolean> getFieldUpdater() { 
       return new FieldUpdater<TableLight, Boolean>() { 

        public void update(int index, TableLight object, Boolean value) { 
         if (value) { 
          tablesTabPanel.addTable(object); 
         } else { 
          tablesTabPanel.removeTable(object); 
         } 
        } 
       }; 
      } 

      public Boolean getValue(TableLight object) { 
       return selectionModel.isSelected(object); 
      } 
     }); 

Ngoài ra, chỉ để tránh nhầm lẫn. Khi tôi nói về MyData ở trên, đó là TableLight trong ví dụ.

7

Thêm một mô hình lựa chọn mở rộng sẽ giúp bạn có được thành phần được chọn cuối cùng:

gridSelectionModel = new MultiSelectionModel<MyData>(KEY_PROVIDER){ 

     public void setSelected(MyData myData, boolean selected) { 
      super.setSelected(myData, selected); 
      if (selected){ 
       System.out.println("setSelected selected " + myData); 
       // call now some ui handler to use the last selected myData element 
      } 
     } 
    }; 

Tôi hy vọng điều này sẽ giúp.