我正在使用jstree插件和ajax調用。在某些時候,我打電話給如何在不觸發select_)節點的情況下刷新jstree
$("#tree").jstree("refresh");
爲了檢索通過ajax調用創建的新節點。這很好,除了在刷新時觸發select_node.jstree。有沒有辦法來防止樹刷新觸發select_node?
我正在使用jstree插件和ajax調用。在某些時候,我打電話給如何在不觸發select_)節點的情況下刷新jstree
$("#tree").jstree("refresh");
爲了檢索通過ajax調用創建的新節點。這很好,除了在刷新時觸發select_node.jstree。有沒有辦法來防止樹刷新觸發select_node?
我結束了使用刷新之前設置一個標誌爲真,並在select_node事件觸發,只有在標誌被設置爲false,執行邏輯,否則將其設置爲false和別的什麼都不做:
refresh = true;
$("#tree").jstree("refresh");
[...]
$("#tree").jstree({...}).bind("select_node.jstree", function (e, data) {
if (refresh) {
refresh = false;
} else {
// do my thing
}
});
jstree現在有一個適合這個目的的'redraw'方法。 –
如果您正在使用UI插件,則refresh()函數「啓用在刷新之前保存選擇狀態並在之後進行恢復」。因此,如果當前選定節點(在刷新之前)是要刷新的節點的子節點,則狀態將在觸發reselect()函數刷新後恢復。刷新功能鎖這樣的:
refresh : function (obj) {
var _this = this;
this.save_opened();
if(!obj) { obj = -1; }
obj = this._get_node(obj);
if(!obj) { obj = -1; }
if(obj !== -1) { obj.children("UL").remove(); }
else { this.get_container_ul().empty(); }
this.load_node(obj, function() {
_this.__callback({ "obj" : obj});
_this.reload_nodes(); //this will trigger the reselect() function
});
我有同樣的問題,我評論說,線(_this.reload_nodes())。不要認爲這是一個最佳解決方案,但解決了我的問題。
或者你可以刷新
refresh=true;
$("#tree").jstree("refresh");
$("#tree").jstree("deselect_all");
後取消選擇所有的節點這應該工作!
在刷新樹之前取消選擇節點將工作。
bool的問題是,如果當前選擇的節點有子節點,則會爲每個子節點觸發select_node.jstree。
相反,在刷新功能中有two parameters。第二個可以是一個bool或一個函數,它接收一個包含所有可見節點的core.selected數組的狀態對象。如果清空數組並返回狀態,則根本不會觸發select_node.jstree。
var tree = $('#mytree').jstree(true);
tree.refresh(false, function (state) {
//console.dir(state);
state.core.selected = [];
return state;
});
您對select_node.jstree有什麼不喜歡的? – Radek