6

次の点についてお役に立てれば幸いです。

URL経由でJSONデータをロードしたjsTreeがあります。すべてのデータがプリロードされます。

私がする必要があるのは、検索機能を変更して、ユーザー入力に基づいて AJAX を介してツリー全体を新しい JSON データでリロードすることです (バックエンドでより複雑なノード検索を行う必要があるため)。

まず最初に、jsTree コードで URL を呼び出すようにします。最初にツリーをロードしたときと同じ URL から始めました。

ただし、これは私が解決策を見つけることができない問題です-最初にツリーをロードするためにURLが正常に呼び出されますが、検索テキストを入力して[検索]をクリックすると、jsTreeは通常の内部検索を使用してノードを強調表示しますが、私が提供する URL は二度と呼び出されません。

HTMLは

<div>
    <form>
        <div>
             <input id="treeSearchText" type="text" />
             <button id="searchTree" class="btn">Search</button>
             <button id="clearSearch" class="btn">Clear</button>
        </div>
    </form>
</div>

<div id="myJsTree" style="height: 100%;"></div>

私が使用しているjsTreeの初期化は次のとおりです。

var url = <my_url>;

$("#myJsTree").jstree({
    "json_data" : {
        async : true,
        "ajax" : {
            "url" : url
        }
     },
    "search": {
        "case_insensitive" : true,
        "ajax" : {
            "url" : url       
        }
    },
    'ui' : {
        'select_limit' : 1,
        'initially_selected' : [${myId}],
    },
    "plugins" : [ "json_data", "search", "sort", "ui", "themeroller" ],
});

検索コードのスニペット:

$("#searchTree").click(function() {
    $("#myJsTree").jstree("search", $("#treeSearchText").val());
    return false;
});

助けていただければ幸いです。

ありがとう。

4

1 に答える 1

5

最後に解決策を見つけましたか?

私は現時点で同じことをしています - プラグインオプションのセクションはajaxjQuery searchajaxオプションと同じように動作します。type: "POST"successdataType: "JSON"

マニュアル(世界で最も優れたマニュアルではありません) から、一致した検索結果ごとに、一致するノード ID を含めずにパスを指定する必要があります。jsTree は指定したパスをロードし、組み込みの強調表示がテキストと一致します。たとえば、検索に一致したエントリが#secondchildノード (3 レベル下) にある場合、これを jsTree に渡して検索結果をロードする必要があります。

Array[ '#rootnode', '#firstchild', '#secondchild' ]

これらの 3 つのノードが DOM にまだ存在しない場合は、指定した標準のデータ取得方法でこれらのノードが読み込まれます。目的のパスをハードコーディングして、JSON の結果を使用していくつかのテストを行い、それがどのように機能するかを確認します。

注: successAjax リクエストでメソッドを定義した場合は、メソッドで取得したデータ オブジェクトを返す必要があります。これにより、jsTree がそれを解析して処理できるようになります。私の場合console.log(data)、後でデータを返さなかったので、何もしませんでした。

編集

一致した各要素へのパスを含む複数の配列を返す代わりに、一意のノード IDを含む単一レベルの配列を返す必要があり、検索プラグインはそれを期待どおりに解析し、クライアント側の検索の前に新しいものをロードします。は発表された。

私の説明については、こちらをご覧ください: https://stackoverflow.com/a/20316921/2812842

于 2013-11-29T04:24:35.097 に答える