我有一棵樹。jsTree創建文件夾 - 在用戶輸入名稱前創建的文件夾
我可以創建一個文件夾。
但是,這樣做存在問題。 jsTree下載中包含的filebrowser演示中也存在此問題。
這是一個用戶體驗問題,所以我希望我可以很好地描述它。
1)中創建他們想要新文件夾 上的節點/文件夾的用戶點擊。
2)他們從上下文菜單中選擇「New-> Folder」。 3)此時,在後臺,jsTree用默認名稱「New node」觸發 「create_node.jstree」事件。 create_node.jstree事件確實ajax返回到web api,並且在文件系統上創建了一個 文件夾。
4)但是,在頁面上,用戶正在查看的字段是 ,提示用戶輸入節點/文件夾的自定義名稱。
5)一旦用戶輸入名稱,頁面上的節點被更新,但 jsTree不會再次調用後端來重命名該文件夾。
結果是一個名爲節點「,並要求在文件系統上的文件夾‘新節點’
什麼會更合適:用戶輸入客戶端節點只有在
/文件夾名稱確實jsTree 呼籲create_node.jstree事件。
這將使我的後端代碼來執行,故障排除和報告成功/ failu重新命名爲用戶所需的文件夾。
代碼剪 的create_node事件
$('#mytree').on('create_node.jstree', function (e, dta) {
$.get('/<whatever>/FolderBrowser?operation=create_node', { 'type': dta.node.type, 'id': dta.node.parent, 'text': dta.node.text })
.done(function (d) {
dta.instance.set_id(dta.node, d.id);
})
.fail(function() {
dta.instance.refresh();
});
});
和樹本身
$('#mytree').jstree(....
, 'contextmenu': {
'items': function (node) {
var tmp = $.jstree.defaults.contextmenu.items();
delete tmp.rename;
delete tmp.remove;
delete tmp.ccp;
tmp.create.label = "New Folder";
tmp.create.action = function (dta) {
// I have $10 for you if you can comprehensively explane everything going on in the following.
var inst = $.jstree.reference(dta.reference)
var obj = inst.get_node(dta.reference);
inst.create_node(obj, { type: "default" }, "last", function (new_node) {
setTimeout(function() { inst.edit(new_node); }, 0);
});
}
return tmp;
}
, 'check_callback': function (o, n, p, i, m) {
if (m && m.dnd && (m.pos !== 'i'))
return false;
/* not allowed options for this application
if(o === "move_node" || o === "copy_node") {
if(this.get_node(n).parent === this.get_node(p).id) { return false; }
}
*/
return true;
}