私は jQuery ウィジェット jqTree をナビゲーションとして、また動的に作成されたネストされた要素のアセンブリとして利用しています。これは完全な機能を備えており、私が見た jQuery の世界では優れたコンポーネントの 1 つです。
https://github.com/mbraak/jqTree
setState
しかし、動的に作成されたノードを保存するために、特にページが更新されたときにそれを活用することはできません。このようなフォーラムのような準標準的な質問に Github の「問題」を使用するのは嫌いなので、皆さんにお願いします。
フォームを使用して、Web アプリに関する特定のデータを保存するだけでなく、そのフォームからの結果の一部を利用して、jqTree のインスタンスに新しいツリー ノードや子を設定します。これは、jqTree のネイティブ関数addNodeAfter
とappendNode
. 問題は、フォームが送信され、それに応じてページがリセットされるときの状態を取得および設定することです。
開いている/閉じているネストされたノードの最後の状態を保存するためのパラメーターがありますが、これはsaveState: true,
うまく機能しますが、フォームのライフサイクル中にフォームによって動的に生成されたノード/子は、フォームが送信されてページが更新されると破棄されます。誰かが開発者にこれらの行に沿って何かを尋ねます:
https://github.com/mbraak/jqTree/issues/301
しかし、私が答えに最も近いのは、次の引用です。
You can use the functions getState and setState to save the state of the tree.
var state = $('#tree1').tree('getState');
$('#tree1').tree('setState', state);
実行getState
するaddNodeAfter
と、次のような console.log() 結果が得られます。
{"open_nodes":[1],"selected_node":[4]}
の同じ選択/作成ノード シナリオでsetState
、コンソールに表示されます。
{"type":"tree","timeStamp":1440016021305,"jQuery111307363375960849226":true,"isTrigger":3,"namespace":"refresh","namespace_re":{},"target":{"jQuery111307363375960849226":16}}
つまり、私が見る限り、それらの命名法には直接的な関係がなく、ほぼ完全に異なる応答です。
そして、フォームを送信し、同時に新しいノード データを保存しようとすると、次のようになります。
('form').on('submit', function(e){
var state = $tree.tree('getState');
var savedstate = $tree.tree('setState', state);
console.log(state);
console.log(savedstate);
//e.preventDefault();
});
データを保存したり、コンソールの例を取得したりしません。コメントアウトされたステートメントに注意してe.preventDefault();
ください -- コメントを戻すと、コンソールでこれら 2 つの非常に異なる結果が得られますが、もちろん、フォームはトリガーされず、データが保存されていないことがわかります。
SO -- 2 つの質問があると思います。
getState
1.) jqTreeとjqTreeでのこれら 2 つの非常に異なる結果の関係は何setState
ですか? と:
2.) フォームを送信し、新しく作成されたツリー ノードを保存し、ページのリロード時にツリーを再設定するにはどうすればよいですか?
ここで長文になってしまい申し訳ありません。ご関心をお寄せいただき、ありがとうございます。