2010-02-16 14 views
9

मैं जानना चाहता हूं कि मैं एक्स्टजेस में किसी विशेष नोड पर क्लिक करते समय पेड़ के भाई नोड्स को कैसे देख सकता हूं।माता-पिता पर क्लिक किए जाने पर पेड़ के बच्चे नोड्स की जांच करें [ExtJS]

मैंने प्रत्येक नोड के लिए आईडी दी थी और मैं एक क्लिक किए गए नोड की आईडी तक पहुंच सकता हूं। तो मैं स्वचालित रूप से बाल नोड्स की जांच कैसे कर सकता हूं ??

किसी ने मुझसे मदद करें ..

उत्तर

7
// or any other way of getting hands on the node you want to work with 
var node = treePanel.getNodeById('your-id'); 
node.eachChild(function(n) { 
    n.getUI().toggleCheck(true); 
}); 

आप इस वर्तमान नोड के पूरे सबट्री पर काम करना चाहते हैं, तो आप कुछ प्रत्यावर्तन करना होगा।

एक छोटी सी अधिक एकीकृत: जब आप नोड्स पॉप्युलेट

treePanel.on('checkchange', function(node, checked) { 
    node.eachChild(function(n) { 
     n.getUI().toggleCheck(checked); 
    }); 
}); 
+2

नए एपीआई संस्करणों में काम नहीं कर सकता है। इस http://stackoverflow.com/questions/6579769/automatically-check-uncheck-all-subtree-nodes-in-extjs-tree-when-certain-node-ge – pahan

+0

यह सही है। उपरोक्त कोड Ext JS 3 के लिए है, Ext JS 4 ने पेड़ एपीआई को काफी हद तक बदल दिया है। –

+2

तो यदि आप बच्चे नोड्स का विस्तार नहीं करते हैं तो वे लोड नहीं होंगे। तो जब आप चेकचेंज को कॉल करते हैं तो यह केवल लोड किए गए बाल नोड्स की जांच करेगा। मैं क्या कर रहा था node.expand (सच) जोड़ रहा था; node.eachChild से पहले, इसलिए यह सभी नोड्स का विस्तार करता है और फिर उन सभी की जांच करेगा। – Grammin

0

JSON या XML "जाँच" संपत्ति सच है या गलत पर सेट की आवश्यकता होगी। मुझे लगता है कि आप यह करने के लिए एक AsyncTreeNode का उपयोग कर रहे हैं। यदि पेड़ नोड्स इस चेक किए गए प्रॉपर्टी के बिना बनाए जाते हैं, तो ExtJS इसे चेकबॉक्स के साथ प्रस्तुत नहीं करेगा।

5
function nodeCheck(node) { 
    node.eachChild(function(n) { 
     if(n.hasChildNodes()) 
      nodeCheck(n) 
     n.getUI().toggleCheck(false); 
    }); 
} 
var node = (tree.getSelectionModel().getSelectedNode()) ? tree.getSelectionModel().getSelectedNode() : tree.root; 
if(node) nodeCheck(node); 

यह मेरे लिए अच्छी तरह से काम करता है;)

+0

ठीक काम करें! कम से कम क्रोम में मुझे निम्न त्रुटि नहीं है: "अधिकतम कॉल स्टैक आकार पार हो गया" =) –

2

श्रोताओं: {

checkchange : function(node, checked) { 
    node.parentNode.cascadeBy(function(n){n.set('checked', checked);}); 
} 

}

1
function checkChange(node, checked, Object) { 
    node.cascadeBy(function(n) { 
     n.set('checked', checked); 
    }); 
} 
+0

कुछ संक्षिप्त स्पष्टीकरण उपयोगी रहे होंगे। –

-1

या, यदि मेरे जैसे, आप स्वचालित रूप से जांच करने की आवश्यकता/सही का निशान हटाएँ अभिभावक नोड जब सभी बच्चे के पत्ते नोड्स चेक/अनचेक किए जाते हैं तो आप इसे आजमा सकते हैं:

function (node, checked) 
{ 

    if (node.get('leaf')) 
    { 
     node = node.parentNode; 
     var siblingStateEqual = true; 
     node.cascadeBy(function (n) 
     { 
      if (n != node) { 
       if (n.get('checked') != checked) { 
        siblingStateEqual = false; 
       } 
      } 

     }); 

     if (siblingStateEqual == checked) 
     { 
      node.set('checked', checked); 
     } 

    } 
    else 
    { 
     node.cascadeBy(function (n) { n.set('checked', checked); }); 
    } 


} 
0

श्री सी का जवाब ठीक काम करता है (एक्स्टजेस 4.2), लेकिन एक बग तब होगा जब पेरेंटनोड के शिशुओं में 1 बच्चा होता है। यहां मेरा थोड़ा सुधार है। कोई और

function (node, checked) { 

    if (node.isLeaf()) { 
     node = node.parentNode; 
     var siblingStateEqual = true; 
     if (node.childNodes.length == 1) { 
      siblingStateEqual = checked; 
     } else { 
      node.cascadeBy(function (n) { 
       if (n != node) { 
        if (n.get('checked') != checked) { 
         siblingStateEqual = false; 
        } 
       } 

      }); 
     } 

     if (siblingStateEqual == checked) { 
      node.set('checked', checked); 
     } 

    } 
    else { 
     node.cascadeBy(function (n) { 
      n.set('checked', checked); 
     }); 
    } 
} 
संबंधित मुद्दे