2015-04-02 102 views
1

我想在用戶每次打開節點時強制執行ajax調用,即不緩存。一個小小的Google提示在用戶關閉後刪除一個節點的子節點。看起來很簡單,但我不能讓它工作。
在下面的代碼中,after_close事件實際上是被觸發的,但是三個刪除子節點的語句似乎沒有效果。我得出這樣的結論,因爲當節點第一次打開時,我觀察到fiddler中的初始ajax調用,但關閉節點並重新打開節點不會生成調用。 備註: 我使用隨機數參數來防止在瀏覽器上緩存。 我已經設置'check_callback'標誌每the documentation從jstree節點清除緩存

// load the tree 
     $('#tree').jstree({ 
      'core': { 
       "themes": { "theme": "classic", "dots": false, "icons": false }, 
       'html_titles': true, 
       'load_open': true, 
       'data': { 
        'url': 'GetChildNodes/', 
        'data': function (node) { 
         return { 'id': node.id === '#' ? '0_0' : node.id, 'noCache': Math.random() }; 
        } 
       }, 
       'check_callback': function() { return true; } 
      }, 
      "plugins": ["themes", "ui"] 
     }); 

     // Handles tree view links so that the tree view does not intercept the event. 
     $("#tree").delegate("a", "click", function (e) { 
      if ($("#tree").jstree("is_leaf", this)) { 
       document.location.href = this; 
      } 
      else { 
       $("#tree").jstree("toggle_node", this); 
      } 
     }); 

     $('#tree').on('after_close.jstree', function (e, data) { 
      var tree = $('#tree').jstree(true); 
      var children = tree.get_children_dom(data); 
      tree.delete_node(children); 
     }); 

回答

1

使用此:

$('#tree').on('after_close.jstree', function (e, data) { 
     var tree = $('#tree').jstree(true); 
     tree.delete_node(data.node.children); 
     tree._model.data[data.node.id].state.loaded = false; 
    });