2013-12-10 162 views
3

我有一個jsTree,動態構建,允許用戶選擇他選擇的任何節點。帶有複選框的jsTree,如何禁用所有複選框?

現在我試圖讓此樹只讀,以便其他用戶可以在不改變它的情況下看到這些信息。

所有的例子我看到的是有關禁用特定節點...

我的問題是:有沒有一種方法來定義樹上所有的複選框爲只讀?

代碼中使用了:

jQuery.noConflict(); 
jQuery(
    function() { 
     jQuery("#divTree").jstree(
      { 
       "plugins": ["themes", "json_data", "checkbox", "sort", "ui", "real_checkboxes"], 
       json_data: { data: data } 
      } 
     ); 
    } 
); 
+0

當你說只讀,你的意思是禁用所有的UI選項(重命名,移動,添加,刪除等)? –

+0

我的樹不允許所有這些操作。渲染後,它只是一個簡單的樹與複選框 – Sergio

回答

4

問題就迎刃而解了。這是需要它的人的解決方案。

jQuery.noConflict(); 
jQuery(
    function() { 
     jQuery("#divTree") 
     <% if(isReadOnly) { %> 
     .bind("loaded.jstree", function (event, data) 
      { 
      jQuery('.jstree a').click(function() {return false;}); 
     }) 
     <% } %> 
     .jstree(
       { 
        "plugins": ["themes", "json_data", "checkbox", "sort", "ui", "real_checkboxes"], 
        json_data: { data: data } 
       } 
      ); 
     } 
    ); 
+0

謝謝。我一直在尋找解決方案,而且您的解決方案簡單而優雅! –

+1

一個問題就是,通過這種方法,當節點展開/摺疊時,複選框將變爲啓用狀態。爲了解決這個問題,我添加了另一個'after_open.jstree'的事件監聽器,即使這樣做也是如此。 –

+0

如果樹結構複雜,只能在頂層節點上運行。所以,你應該使用事件「ready.jstree」而不是「loaded.jstree」。 – Spark13

0

您可以在默認type定義此,也可以定義自己type特定的節點,然後將它們綁定到它:

jQuery("#divTree").jstree({ 
    "types": { 
     "default": { 
      "check_node": false, 
      "uncheck_node": false 
     } 
    },  
    "plugins": ["themes", "json_data", "checkbox", "sort", "ui", "real_checkboxes"], 
    "json_data": { data: data } 
}); 

如果我是你,我只需在服務器端if聲明中包裝types聲明以確定您是否希望此樹是隻讀的。

文檔:http://www.jstree.com/documentation/types

+0

我試過你的解決方案,但樹仍然可編輯... +1 – Sergio

+0

你有其他類型的節點? –

+0

不...只有一種類型 – Sergio