我使用的是jQuery FileTree。在通过javascript ajax(老式的javascript xmlhttp请求,而不是jQuery)上传文件后,我使用以下代码调用fileTree:
$('#jstree').fileTree({
script: '/ajax/file_tree2/' + path,
multiFolder: true,
expandSpeed: 250,
collapseSpeed: 250
});
它生成了一个很好的图形文件树,我可以在其中点击(path
变量是新文件夹,用作URI段变量,我只需将服务器端连接器jQueryFileTree.php代码复制到CodeIgniter控制器类中的公共函数中。这是我认为与问题无关的额外信息,仅供参考)。
但是,由于某种原因,当我通过上传新文件(无需重新加载页面)进行第二次调用时,文件树不会更新或刷新。当我为不同的文件夹上传新文件时,我想刷新树结构。
我试图使用加载器gif:清除#jstree元素本身
$('#jstree').html('<img src="'+$("#base_url").html()+'/assets_/images/loading/loading36.gif" />');
甚至只是清除html:
$('#jstree').html('');
我尝试过其他小部件类型库中的命令,如"destroy"或"refresh":
$('#jstree').fileTree.destroy();
$('#jstree').fileTree({
refresh: true,
script: '/ajax/file_tree2/' + path,
multiFolder: true,
expandSpeed: 250,
collapseSpeed: 250
});
它们要么什么都不做,要么返回一个js错误。
我下载了v2.1.4的原始源代码(467904a3ab5c13df094ffe01ddb0d0fea24c5d6a),并从修改了第203行
if (!data) {
至
if (!data || (Object.prototype.toString.call(args) === '[object Object]' && args.reload)) {
现在,如果我想重新加载fileTree,我只需在参数数组中传递"reload:true"。