1

ノード内に複数のテキスト ブロックを持つツリーを作成しようとしています (たとえば、タイトルと、ユーザーがツリー内のそのノードの新しい子を作成するためにクリックできるリンク)。現在、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」を削除すると、ノード内の自分のリンクがクリック可能になりました。

4

0 に答える 0