0

ExtJS4

TreePanel を次のように作成しました

var tree = Ext.create('Ext.tree.TreePanel', <some config>);
tree.store.setRootNode(treeJSON);

ここで、ストア データは同じでストア オブジェクトが異なる別のツリーを作成したいと考えています。私がこれを行う場合:

var tree1 = tree.cloneConfig(<separate listeners>);

次に、別のツリーを作成します。しかし、それでも両方がリンクされています。1 つのツリー ノードを折りたたんだり展開したりすると、他のツリーの対応するノードも同様に動作します。

複製できるように、ストアの cloneConfig プロパティもありません。このツリーの JSON からストアを再作成しようとしました。

var store2 = Ext.create('Ext.data.TreeStore', {store: treeJSON});
var tree1 = tree.cloneConfig({store: store2});

S店store2とは違うと思いました。treeしかし、同じtreeJSONを使用していたため、問題がありました。

私ができることの 1 つは、JSON を文字列に変換し、それをデコードして別の JSON オブジェクトを作成し、それを新しいストアに割り当てることです。それが前の店とは違う。しかし、そのための簡単な方法が存在する必要があります。

ツリー内の 1 つのノードを展開/折りたたむときに、他のノードで同じように展開/折りたたまないように、異なるストア オブジェクトで複製ツリーを作成する方法は?

4

2 に答える 2

0

私はこれに似たようなことをしました。

古いツリーを解析して新しいツリーを作成する

var root = existingTree.getRootNode ();
if (root) {
  var rootNode = this.getClonedTreeRoot(root);
  newTree.store.setRootNode (rootNode);
}


getClonedTreeRoot: function (node) {

  var me = this;
  var rootData;
  var childData = [];

  if (node.hasChildNodes ()) {
    var childNodes = node.childNodes;
    Ext.Array.each (childNodes, function (child) {
       if (child.get ('checked')) {
    childData.push (me.getClonedTreeRoot(child));           
       }        
    });
  }

  if (node.isLeaf ()) {
    rootData = {
        "text" : node.get ('text'),
        "leaf" : true,
        "expanded" : false,
        "children" : childData
    };
  } else {
    rootData = {
        "text" : node.get ('text'),
        "leaf" : false,
        "expanded" : true,
        "children" : childData
     };
   }

   return rootData;
}
于 2012-08-07T07:21:09.473 に答える