2014-01-24 61 views
3

要做的事:檢查孩子應該檢查父母的樹,清除父母複選框應清除所有的孩子。選中並取消選中樹節點中的節點

實施例:

parent1
--child1
--child2
          --subChild1
          --subChild2

場景1:在上述情況下,如果subChild1被選中,那麼parent1和child2也應該被檢查。

Scenario2:如果parent1被選中,那麼它的所有兒童(檢查)應選中。

從此Check/Uncheck Nodes,只有當選擇父節點時,其子節點纔會被選中。

他們的東西Implemeted一個我想要的方式,但無法弄清楚(執行)的複雜程度足夠高,讓我understand.Here是reference

請幫我解決了這個功能。謝謝。任何幫助,將不勝感激。

+0

你給一個extjs 1.0例子的參考是否你使用Ext4.2就像標籤一樣? – VDP

+0

是的,我使用ExtJs4.2.I提供了鏈接供參考。 – Dev

回答

5

這裏是我有什麼done.It花了一些時間,但它的工作。

checkchange : function(node, checked, opts) { 

function clearNodeSelection(node){ 
    //node is not leaf node 
    console.log(node); 
    leafNode = node.raw.leaf; 
    if(!leafNode){ 
     node.cascadeBy(function(node) { 
      node.set('checked', false); 
     }) 
    } 
} 

if(!checked){ 
    console.log("inside !checked : "+checked); 
    clearNodeSelection(node); 
} 

function selectParentNodes(node){ 
    var parentNode = node.parentNode; 
    if(parentNode){ 
     parentNode.set('checked', true); 
     selectParentNodes(parentNode); 
    } 
} 

selectParentNodes(node); 
} 

Atlast,Thanks @VDP。 '太棒了'太棒了。

+0

很高興你能找到它。我發現類似的場景1,但沒有出現在場景2(有一個3小時的Scrum會議:() – VDP

3

這裏你去! Working fiddle

=>您添加的偵聽器checkchange,檢查它是否具有的childNodes如果是這樣設置的的childNodes

注:檢查數據有checked: false參數啓用的複選框。 (如果不通過後端發送您可以將它添加到你的模型並將其設置爲默認強制)

var store = Ext.create('Ext.data.TreeStore', { 
    root: { 
     expanded: true, 
     children: [ 
      { text: "detention", leaf: true, checked: false }, 
      { text: "homework", expanded: true, children: [ 
       { text: "book report", leaf: true, checked: false }, 
       { text: "algebra", leaf: true, checked: false} 
      ], checked: false }, 
      { text: "buy lottery tickets", leaf: true, checked: false } 
     ] 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    title: 'Simple Tree', 
    width: 200, 
    height: 150, 
    store: store, 
    rootVisible: false, 
    renderTo: Ext.getBody(), 
    listeners: { 
     checkchange: function(node, checked, eOpts){ 
      if(node.hasChildNodes()){ 
       node.eachChild(function(childNode){ 
        childNode.set('checked', checked); 
       }); 
      } 
     } 
    } 

}); 
+0

感謝您的努力@ VDP.But它沒有按照我想要的方式工作。它完全矛盾Scenario1和Scenario2,這是我想要的。 根據你的解決方案,在選擇parentNode時,它的子節點將被選中。再次運行。 – Dev

+0

加入+1的努力。 – Dev

+0

對不起,我有點快:)沒有很好的閱讀..但如果你知道你可以在checkchange中做到這一點,應該不難。我會盡我所能在幾分鐘內更新我的答案:) – VDP

相關問題