2012-06-13 28 views
32

Tôi đang sử dụng đoạn mã sau:Làm cách nào để mở tất cả các nút trong jquery Jstree?

$("#treeview").jstree(); 
$("#treeview").jstree('open_all'); 

Với html sau:

<div id="treeview"> 
    <ul> 
    <li> 
     <a href="#">rubentebogt</a> 
     <ul> 
     <li> 
      <a href="#" onclick="goTo('index.php?module=alarm&amp;pagina=dashboard&amp;id=6',false);">Beneden</a> 
     </li> 
     <li> 
      <a href="#" onclick="goTo('index.php?module=alarm&amp;pagina=dashboard&amp;id=7',false);">Boven</a> 
     </li> 
     </ul> 
    </li> 
    </ul> 
</div> 

Vấn đề của tôi là tất cả các nút ở lại đóng cửa, tôi không thể nhận được chúng để mở với jstree (' mở tất cả');

+0

Và sự cố là gì? – Andreas

+0

bạn có thể đăng HTML đã tạo thay vì Smarty không? –

+1

Tôi đã chỉnh sửa câu hỏi của mình, cảm ơn các bạn. – RTB

Trả lời

47

jsTree documentation là "tối ưu phụ". Các tài liệu không nêu rõ rằng việc khởi tạo hoạt động không đồng bộ. Có core.loaded():

Chức năng giả có mục đích chỉ kích hoạt sự kiện được tải. Sự kiện này được kích hoạt một lần sau khi các nút gốc của cây được nạp, nhưng trước khi bất kỳ nút nào được đặt trong initial_open được mở ra.

Điều này cho thấy sự kiện loaded.jstree được kích hoạt sau khi cây được thiết lập. Bạn có thể móc vào sự kiện đó để mở tất cả các nút của bạn:

var $treeview = $("#treeview"); 
$treeview 
    .jstree(options) 
    .on('loaded.jstree', function() { 
    $treeview.jstree('open_all'); 
    }); 
+0

Điều này cũng có tác dụng trên sự kiện refresh.jstree không? – RTB

+1

Tôi gặp vấn đề ngược lại sau khi sử dụng mã này.Tôi đã kết thúc thêm một cuộc gọi khác tới jstree ('open_all') sau cuộc gọi "on" vì chrome đã hoàn thành cây trước khi đăng ký sự kiện –

+0

Câu trả lời này vẫn hoạt động? Tôi không thể làm cho nó hoạt động cho cây của tôi, mặc dù nó có vẻ khá thẳng về phía trước. – Smoore

15

Nếu bạn muốn mở tất cả các nút khi cây nạp:

$("#treeview") 
    // call `.jstree` with the options object 
    .jstree({ 
     "plugins" : ["themes", "html_data","ui","crrm","sort"] 
    }) 
    .bind("loaded.jstree", function (event, data) { 
     // you get two params - event & data - check the core docs for a detailed description 
     $(this).jstree("open_all"); 
    })  
}); 
+4

Vì lợi ích của poster gốc, nó giúp giải thích thêm một chút tại sao điều này có hiệu quả - tức là trong trường hợp này giải thích rằng '.jstree()' chạy không đồng bộ và kích hoạt một sự kiện khi nó sẵn sàng. –

+1

Cảm ơn mã, nó hoạt động tốt cho tôi, btw, bạn có thêm}) trong mã. –

-1
.bind("loaded.jstree", function (event, data) { 
     // you get two params - event & data - check the core docs for a detailed description 
     $(this).jstree("open_all"); 
    }) 
7

tất cả các câu trả lời ở trên không làm việc trong không gian làm việc của tôi. tôi đã tìm kiếm một lần nữa và tìm thấy liên kết này (Why doesn't jsTree open_all() work for me?) là hữu ích, và gửi câu trả lời của tôi: phiên bản

jstree: 3.0.0-bata10

$(document).ready(function() { 
    $("#tree").bind("loaded.jstree", function(event, data) { 
    data.instance.open_all(); 
    }); 
    $("#tree").jstree(); 
}) 
+0

chỉ cần ràng buộc ready.jstree như atmelino đề cập và giải quyết vấn đề – mikus

23

Tôi đang sử dụng phiên bản 3 của jstree và Chrome. Sự kiện nạp không làm việc cho tôi, nhưng sự kiện đã sẵn sàng làm, ngay cả sau khi dụ jstree đã được tạo ra:

$('#treeview').on('ready.jstree', function() { 
    $("#treeview").jstree("open_all");   
}); 

http://www.jstree.com/api/#/?q=.jstree%20Event&f=ready.jstree

+0

Điều này làm việc cho tôi, trong khi câu trả lời được chấp nhận thì không. – xil3

1

sử dụng đơn giản đang

$(".jstree").jstree().on('loaded.jstree', function() { 
    $(".jstree").jstree('open_all'); 
}) 
0

Khi sử dụng dữ liệu html ' bạn có thể thiết lập lớp mở jstree trên bất kỳ phần tử <li> nào để làm cho nó mở rộng ban đầu, sao cho trẻ em của nó có thể nhìn thấy. ' - https://www.jstree.com/docs/html/

<li class="jstree-open" id="node_1">My Open Node</li> 
0

Tôi đã thử tất cả các câu trả lời ở đây và chúng không hoạt động với jsTree (v3.3.4). Điều gì đã làm việc là sự kiện load_node.jstree:

.on('load_node.jstree', function() { 
     jstree.jstree("open_all"); 
    }) 
Các vấn đề liên quan