2012-10-10 21 views
6

मुझे जेएसटीरी और अजाक्स के साथ एक अजीब समस्या है।जेएस ट्री - select_node काम नहीं कर रहा

मैं एक अजाक्स/पीएचपी अनुरोध जो HTML का उपयोग कर (यूएल, ली, एक टैग के साथ) उत्पन्न करता है के माध्यम से मेरी पेड़ उत्पन्न ...

$.ajax({ 
    url: 'ajaxTreeView.php?method=edit&partid='+partId, 
    cache: false, 
    success: function(tree) 
    { 
     $('#treeViewer').html(tree); 
    }}); 

और का उपयोग कर कोड पर JStree को सक्रिय ...

options = 
{ 
    "core": { animation: 120 }, 
    "themes": { theme: 'corral', dots: true }, 
    "types": 
    { 
     "types": 
     { 
      "parent": { "icon": { "image": "images/custom/Legend/node_select.png" } }, 
      "child": { "icon": { "image": "images/custom/Legend/node_select_child.png" } }, 
      "current": { "icon": { "image": "images/custom/Legend/node.png" } } 
     } 
    }, 
    "plugins": [ "html_data", "types", "themes", "ui", "contextmenu", "cookies" ], 
    "ui": { "select_limit" : 1 }, 
    "cookies": { "save_selected" : false } 
}; 

$("#tree").jstree(options); 

मुझे आसानी से चयन करने के लिए नोड नहीं मिल रहा है। मैंने प्रारंभिक रूप से चयन करने की कोशिश की लेकिन यह काम नहीं कर रहा है और यह आदर्श भी नहीं है क्योंकि मैं अक्सर प्रोग्रामिंग रूप से नोड का चयन करना चाहता हूं।

मैं उपयोग करने की कोशिश ...

$('#tree').jstree("select_node", '#ref565', true); 

यह काम करता है अगर मैं एक हाइपरलिंक के माध्यम से फ़ंक्शन को कॉल करें लेकिन अगर मैं इसे कहते बाद मैं JStree initalise काम नहीं करता।

मैं एक चेतावनी (यह सब अजाक्स सफलता दिनचर्या में होता है) जोड़ने से देखें ...

$('#treeViewer').html(tree); 
$("#tree").jstree(options); 
alert('test'); 
$('#tree').jstree("select_node", '#ref565', true); 

... कि पेड़ से पहले चेतावनी की शुरूआत गाया नहीं किया है।

मैं एक setTimeOut जोड़ा ...

$('#treeViewer').html(tree); 
$("#tree").jstree(options); 
setTimeout(function() {selectNode(565);},1250); 
$('#tree').jstree("select_node", '#ref565', true); 

... इस काम करता है।

मैं स्पष्ट रूप से बेवकूफ हूं। क्या मैं गलत वाक्यविन्यास का उपयोग कर रहा हूं? नोड का चयन करने के लिए मुझे देरी क्यों तय करनी पड़ेगी?

कृपया मदद करें।

उत्तर

9

यदि आप प्रारंभ में पेड़ लोड के बाद कुछ नोड्स का चयन करना चाहते हैं, तो आपको ui प्लगइन के initially_select विकल्प का उपयोग करना होगा। आपने कहा कि आपने इसे आजमाया है, लेकिन मुझे नहीं लगता कि इसे आपके द्वारा पोस्ट किए गए नमूना कोड में उपयोग किया जा रहा है। क्या आप वाकई सही आईडी की आपूर्ति कर रहे हैं?

प्रोग्रामेटिक रूप से नोड्स का चयन करने के लिए, आपको उन नोड्स का इंतजार करना होगा जिन्हें आप पहले डीओएम में दिखाना चाहते हैं। टाइमआउट कॉल का उपयोग करने के बजाय, मुझे लगता है कि loaded.jstree ईवेंट से जुड़ना अधिक सही है, जिसे पेड़ लोड होने के बाद बुलाया जाना चाहिए और सभी वृक्ष तत्व डोम में हैं, और वहां अपना प्रोग्रामेटिक चयन करें ।

उदाहरण कोड दिखा उपयोग:

$(function() { 

    $("#tree") 
     .jstree({ 
      // List of active plugins 
      "plugins" : [ 
       "ui" 
      ], 

      // UI & core - the nodes to initially select and open will be overwritten by the cookie plugin 
      // the UI plugin - it handles selecting/deselecting/hovering nodes 
      "ui" : { 
       // this makes the node with ID node_4 selected onload 
       "initially_select" : [ "#ref565" ] 
      }, 
      // the core plugin - not many options here 
      "core" : { 
       // just open those two nodes up 
       // as this is an AJAX enabled tree, both will be downloaded from the server 
       "initially_open" : [ "#ref565" ] 
      } 
     }) 
     .bind("loaded.jstree", function (e, data) { 
        $('#tree').jstree("select_node", '#ref565', true); 
     }) 
}); 
+0

यह मैं सिर्फ क्या चाहता था, लेकिन मैं कोड है कि साथ .bind कुछ Googling के बाद शुरू होता है की बहुत सारी देखते हैं। मैं गूंगा हूँ, इसका मतलब यह है कि मुझे लिखना चाहिए ... $ ('# पेड़')। Jstree.bind ("loaded.jstree", फ़ंक्शन (ईवेंट, डेटा) { $ ('# पेड़') .jstree ("select_node", '# ref565', सत्य); }); यदि ऐसा है, तो यह मेरे लिए काम नहीं कर रहा है। –

+0

मैंने अपना उदाहरण अपडेट किया है कि आप एक ईवेंट को कैसे बाध्य करेंगे। अगर कोडिंग त्रुटि के कारण कुछ काम नहीं करता है, तो कृपया इसे समझने के लिए डीबगर का उपयोग करें। –

+0

बहुत बहुत धन्यवाद। मुझे इन घटनाओं को समझना बहुत आसान लगता है, अब मुझे एहसास है कि वे पेड़ के तत्काल होने पर पूर्व-बाध्य हो सकते हैं। महान उदाहरण, चीयर्स :) –

संबंधित मुद्दे