这是最近遇到的问题,在使用jstree创建节点后,需要刷新树状数据并选中创建的结点。翻阅了jstree的api,发现他的refresh方法中并没有回调这个概念。这种情况下就只有和后端开发接口的人员协商解决了。
方案1:在加载数据的接口中返回最新创建的结点ID,但显然比较难做到
方案2:创建结点后刷新数据,并返回创建结点的id,由前端人员设置选中它。
方案3:不刷新数据,在已知位置用后端返回的结点数据前前端创建一个新结点。并选中它。
感觉这三种方案都能达到目的,第一种方案前端几乎不用改动,全靠后端接口判断。第二种方案在jstree中新增加一个刷新后附带回调方法,这种方案修改了jstree,其实我也觉得不是很好,主要还是由于我的回调掌握的不是很好,练习练习 囧
首先修改jstree文件,这里我使用的jstree版本为:jsTree 3.2.1
/**
* 首先找到以下代码
* refresh : function (skip_loading, forget_state)
* 我采取的方法是复制这段代码,新增加一个refresh_clb方法
* refresh_clb: function (cbk,skip_loading,forget_state)
* 看参数就能够知道,只是在前面加了一个cbk参数,阅读刷新方法,可以发现它在获取数据后做了一个load方法,我在load的最后加了一句
* cbk && cbk();
*/
refresh_clb: function (cbk,skip_loading,forget_state){
this._data.core.state = forget_state === true ? {} : this.get_state();
if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget