2

ExtJsアプリをJasmineでテストしています。したがって、関係するビューはありません。

複数のノードを拡張したいのですが、最初はルートノードです。しかし、そのノードを拡張することさえ失敗します。

TreeStoreを作成してから、次のようにします。

コード:

// oStore is my treestore, everything OK
// Here, I also tried calling oStore.load(); see below

var oNode = oStore.getNodeById( 'root' );

// oNode.isExpanded() says false
// oNode.hasChildNodes() says false

oNode.expand(false, function(oChildren) {
    // it never gets here
    console.log( "hello?");
});

のリスナーloadが呼び出されますが、のリスナーが呼び出されbeforeexpandません。

oStore.load()ストアの作成後に最初に電話をかけると、onloadリスナーが呼び出されると、oNode.childNodes.length3人の子供がいます...

  1. では、なぜexpand()コールバックが呼び出されないのですか?そのノードを拡張するにはどうすればよいですか?

  2. 呼び出し時にノードの子がすでにロードされているのはなぜoStore.load()ですか?その後expand()も解雇されません。


編集:

ルートノードをで開始expanded: trueすると、でストアが正しく折りたたまれますcollapse()が、その後expand()は何もしません。

oNode.collapse(false, function() {
   console.log( "collapse()" ); // works, but expand() afterwards does not
});
4

2 に答える 2

1

解決策を見つけました。ストアが読み込まれるのを待つ必要があります。ジャスミンの問題です:

runs( function() {
         oStore.on( 'load', function() {
            bStoreLoaded = true;
         });
      });

waitsFor( function() {
         return bStoreLoaded; 
      }, " store to be loaded", 5000 );

runs( function() {
         oNode.expand(false, function( aoChildren ) {
            aoChildrenRoot = aoChildren;
            bRootExpanded = true;
         });
      });
于 2012-11-21T13:38:45.130 に答える
0

ソースには、拡張する必要があるか拡張可能であるかをノードに通知するための複雑なロジックがあります。プログラムでツリーを操作しようとしたときに使用することになった以下のコードを見てください。

if (!parentNode.isExpanded() && !parentNode.isLeaf()) {
    parentNode.expand(false, function () {// deal with open or closed paths
        console.log('expanded parent to pick up new item');                 
    });
} else {
    parentNode.callStore('suspendAutoSync');
    if (parentNode.isLeaf()) {         // Parts that are leafs
        parentNode.set("leaf", false);  //must be set to work properly
        parentNode.appendChild(newPart);
        parentNode.expand(); //expand to show newly created child
    } else {
        parentNode.insertChild(0, newPart);
    }
    parentNode.callStore('resumeAutoSync');
}
于 2012-11-20T19:13:39.823 に答える