2017-01-30 151 views
1

我有一棵樹。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; 
    } 

回答

0

jsTree工作,因爲你描述它漂亮多了。

1)調用後端實際創建文件夾的默認名稱爲 。此時您可以發送成功/失敗返回到頁面。

2)成功後,再次調用後端將文件夾重命名爲 用戶所需的名稱。此時您可以再次發送成功/失敗。

您的代碼不包含需要重命名的工具。 將rename_node.jstree事件添加到您的代碼中。和其他必要的位。

但是,根據代碼中的註釋,您不必將「重命名」作爲上下文菜單選項。

相關問題