2011-06-23 28 views
6

Tôi có một nút tải lại (gửi lại yêu cầu AJAX) jsTree một lần được nhấp.Làm cách nào để liên kết chức năng gọi lại trên sự kiện tải lại jstree hoàn chỉnh?

Đây là một mã cấu hình mẫu tôi có:

treeContainer.bind("loaded.jstree", function() { 
    alert("the tree is loaded"); 
}).jstree(config); 

Vấn đề tôi cảm nhận được rằng tôi không có cảnh báo (bọc trong một hàm callback) được hiển thị một lần vào nút 'reload' được nhấp thứ 2 , Lần thứ 3, v.v .. Tôi có đang sử dụng sự kiện trạng thái jstree sai không?

Để tóm tắt, tôi muốn một hàm gọi lại jsTree được thực thi mỗi khi tôi nhấp vào nút 'tải lại'.

Tôi hiện đang sử dụng jsTree 1.0-rc1 (rev. 191).

Trả lời

-1

Từ jstree documentation:

.loaded()

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

Vì vậy, bạn có thể gọi phương thức này từ cuộc gọi lại thành công của cuộc gọi ajax. Một cái gì đó như thế này:

$.ajax({ 
    url: "yourscript-url", 
    success: function(){ 
    $('selector-for-jstree-container').jstree('loaded'); 
    } 
}); 

Xem thêm "Tương tác với cây" trên trang tài liệu jstree cùng.

+0

đây không hoàn toàn là những gì tôi cần ... Tôi muốn giữ cấu hình liên quan đến jsTree của mình ở một nơi. điều tôi đang tìm kiếm là một sự kiện như thế này: 'treeContainer.bind (" reloaded.jstree ", function() {...}). jstree (...)' –

+0

@ John Doe Tôi xin lỗi nhưng Tôi không nghĩ rằng có một sự kiện như thế này trong jstree. Bạn sẽ phải làm việc theo cách của bạn xung quanh đó (tương tự như tôi đề nghị) hoặc mở rộng lõi jstree và thực hiện sự kiện mới này. –

1

thêm video này vào cốt lõi:

 reopen : function() { 
      var _this = this; 
      if(this.data.core.to_open.length) { 
       $.each(this.data.core.to_open, function (i, val) { 
        _this.open_node(val, false, true); 
       }); 
      } 
      this.__callback({}); 
      this.reopened(); 
     }, 

lưu ý rằng chỉ this.reopened được thêm vào mở lại-method allready hiện có. hiện nay tạo ra mở cửa trở lại-phương pháp:

 reopened : function() { 
      this.__callback(); 
     }, 

tại ràng buộc mở cửa trở lại-phương pháp mới để cây chọn của bạn

}).bind("reopened.jstree", function (e,data) { 
     alert("i am refreshed..."); 
    }); 

được carefull, bởi vì đây cảnh báo-nhắn cũng sẽ được gọi khi cây được thực hiện tải. Đó là cách tốt hơn, vì bây giờ bạn có một cách để có một cuộc gọi lại khi cây được làm mới!

hy vọng điều này sẽ giúp ích cho bạn!

5

Phá hủy cây trước khi xây dựng cây mới cũng hoạt động.

treeContainer.jstree("destroy"); 
treeContainer.bind("loaded.jstree", function() { 
    alert("the tree is loaded"); 
}).jstree(config); 
+0

Cảm ơn bạn. Sự đơn giản của điều này và thực tế rằng đó là phương pháp duy nhất tôi có thể làm việc khiến tôi rất hạnh phúc. – user1167442

Các vấn đề liên quan