2012-04-23 30 views
6

Trong một cấu trúc cây như thế nàyLàm thế nào để thêm một đứa trẻ vào một nút trong TreePanel?

var rootNode = { 
       id: 'root', 
       text : 'Root Node', 
    expanded : true, 
    children : [ 
    { 
     id : 'c1', 
     text : 'Child 1', 
     leaf : true 
    }, 
    { 
     id : 'c2', 
     text : 'Child 2', 
     leaf : true 
    }, 
    { 
     id : 'c3', 
     text : 'Child 3', 
     children : [ 
     { 
      id : 'gc1', 
      text : 'Grand Child', 
      children : [ 
      { 
       id : 'gc11', 
       text : 'Grand Child 1', 
       leaf : true 
      }, 
      { 
       id : 'gc12', 
       text : 'Grand Child 2', 
       leaf : true 
      } 
      ] 
     } 
     ] 
    } 
    ] 
}; 

var tree = new Ext.tree.TreePanel({ 
    id: 'treePanel', 
    autoscroll: true, 
    root: rootNode 
}); 

Làm thế nào để thêm một nút con của một nút bất kỳ (nói 'cháu')?

Tôi có thể truy cập vào con bằng cách duyệt qua gốc của con treepanel, nhưng tôi đã gắn console vào Firebug, nó không có bất kỳ chức năng nào. Xin lỗi vì mã chưa được định dạng, tôi không thể định dạng mã.

Tree Panel

+0

Để thực sự thấy chức năng có sẵn trong Cài đặt Firebug Đèn chiếu sáng dành cho nhà phát triển - plugin Firebug. Cực kỳ hữu ích cho việc phát triển ExtJS. – dbrin

+0

tôi có điều đó :) – Shashwat

Trả lời

13

Làm như thế này:

var treeNode = tree.getRootNode(); 
treeNode.expandChildren(true); // Optional: To see what happens 
treeNode.appendChild({ 
     id: 'c4', 
     text: 'Child 4', 
     leaf: true 
}); 
treeNode.getChildAt(2).getChildAt(0).appendChild({ 
     id: 'gc13', 
     text: 'Grand Child 3', 
     leaf: true 
}); 

Nếu đây là những gì bạn cần, hãy kiểm tra NodeInterface Class. Nó có nhiều phương pháp hữu ích: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface

+0

nó đã hoạt động! là nó có bất kỳ sự khác biệt giữa tree.root và tree.getRootNode()? – Shashwat

+0

'root' config là khi bạn không muốn lưu trữ và mã hóa dữ liệu gốc của bạn vào cấu hình đó (như mã của bạn ở trên). Sau đó, bạn có thể trả về dữ liệu gốc của mình bằng phương thức getRootNode() khi chạy. Đọc root 'config' và getRootNode() 'method' cẩn thận tại liên kết ở trên. – Natasha

0

Đây có thể là một chuỗi cũ hơn, nhưng, tôi gặp sự cố khi tôi thêm một đứa trẻ vào nút đã chọn. Tôi muốn hiển thị con mới bằng cách mở rộng nút đã chọn và không thành công.

Lý do: nút được chọn mà tôi đã thêm vào một đứa trẻ có thuộc tính 'lá' của thuộc tính được đặt thành true. Đúng vậy. Nhưng do phụ thêm, điều này không còn đúng nữa. Và vì nó, rõ ràng, Ext từ chối mở rộng nút ...

Vì vậy hãy cẩn thận: khi bạn thêm nút vào nút khác, hãy đảm bảo bạn đặt thuộc tính 'lá' của parentNode thành 'false':

var newNode = Ext.create('some.model.TreeModel', savedNode); 
newNode.set('parentId', record.parentLocationId); 
selectedNode.set('leaf', false); 
selectedNode.appendChild(newNode); 
selectedNode.expand(); 
treeView.getSelectionModel().select(newNode); 
Các vấn đề liên quan