展开节点不调用回调

时间:2012-11-20 13:21:13

标签: extjs extjs4.1

我正在使用Jasmine测试我的ExtJs应用程序。所以没有涉及的观点。

我想扩展几个节点,但首先是我的根节点。但即使扩展该节点也会失败。

我创建了我的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(),那么当调用on load侦听器时,oNode.childNodes.length有3个孩子......

  1. 那么为什么没有调用expand()的回调?如何让该节点扩展?

  2. 为什么在调用oStore.load()时节点的子节点已经加载?之后expand()也没有被解雇。


  3. 编辑:

    使用expanded: true启动我的根节点会使我的商店在collapse()上正确折叠,但之后expand()什么都不做。

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

2 个答案:

答案 0 :(得分: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;
         });
      });

答案 1 :(得分: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');
}