ノード内に複数のテキスト ブロックを持つツリーを作成しようとしています (たとえば、タイトルと、ユーザーがツリー内のそのノードの新しい子を作成するためにクリックできるリンク)。現在、jstree はこの種のことをサポートしていないようですが、適切な回避策を探しています (リンクをコンテキスト メニューに配置するつもりはありません)。
この方法でjsonハッシュを作成しました:
def item_to_json_hash(item)
data = {:item_id => item.id, :data => html_for_item_data(item)}
children = []
if (item.has_children?)
children_collection = item.children
children_collection.each do |child|
children << item_to_json_hash(child)
end
data[:children] = children
end
return data
end
def html_for_item_data(item)
return %Q|<table style='display: inline-block'><tr><td>#{item.data}</td><td><a href="/items/new?id=#{item.id}">New Child of Item</a></td></tr></table>|
end
テキストの 2 つのブロックを html マークアップを使用して長い文字列に入れると役立つと思いましたが、jstree がノード全体が選択されることを期待しているという事実が、ノード内のリンクに干渉しています。
ツリーを構築するためのJavaScriptを示す私のインデックスは次のとおりです。
<script type="text/javascript">
$(document).ready(function(){
$("#collisterator_tree").jstree({
core : { "html_titles" : true},
themes : { "theme" : "classic" },
"json_data" : {
"ajax" : {
"url" : "/items.json",
"data" : function(m) {
var html_data = m.attr
return { id : html_data ? m.attr("id") : 0 };
}
}
},
plugins : ["themes", "json_data", "ui" ]
})
});
編集 自分で答えを見つけました。誰かが興味を持っている場合に備えて、ここに投稿します。1 年前のスタック オーバーフローの質問から、必要なヒントが得られました。プラグインから「ui」を削除すると、ノード内の自分のリンクがクリック可能になりました。