子ノードを動的にロードするExt.tree.TreePanelを作成できましたが、ツリーをクリアして新しいデータをロードするのに苦労しています。誰かがこれを行うためのコードを手伝ってくれますか?
7 に答える
ExtJS の第一人者である Saki のすばらしいブログから。
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
Ext JS 4 では:
ツリー パネルのデータをリロードする場合は、ツリー ストアをリロードする必要があります。
getCmp('treeId').getStore().load();
ここで、treeId はツリーの ID です。ストア ID がある場合は、ストア ID に対して直接 load() を使用できます。
すべての子ノードを削除するには:
getCmp('treeId').getRootNode().removeAll();
ただし、ストアからツリー ノードをリロードするために、子ノードを削除する必要はありません。
私の場合、Ext ツリーには AsyncTreeNode タイプの非表示のルート ノードがあります。ツリーをクリアしてサーバーから再作成する場合は、非常に簡単です。
tree.getRootNode().reload();
私はついに彼らのフォーラムで答えを見つけました。興味のある方はこちら:
if (tree)
{
var delNode;
while (delNode = tree.root.childNodes[0])
tree.root.removeChild(delNode);
}
を使用するだけnode.removeAll()
で、このノードからすべての子ノードを削除できます。
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll
私は同様の問題に遭遇し、私が思いついた解決策は、ノードが折りたたまれたときにロードされていないことに「タグを付ける」ことでした。
listeners: {
collapsenode: function(node){
node.loaded = false;
},
if (tree) { var delNode; while (delNode = tree.root.childNodes[0]) tree.root.removeChild(delNode); }
私は Ext を知りませんが、それを容易にする DOM 抽象化を持っているのではないかと推測しています。プロトタイプで同等のものは次のようになります。
tree.root.immediateDescendants().invoke('remove'); // or
tree.root.select('> *').invoke('remove');
ツリーtree.root
のルート DOM ノードではなくコレクション オブジェクトを参照している場合を除き、DOM API メソッド名を借用していませんか? これは、特に最新の JS ライブラリの場合、非常にありそうにないようです。