2

我正在用 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()在商店创建后开始调用,那么当load监听器被调用时,它会说,oNode.childNodes.length有 3 个孩子......

  1. 那么为什么expand()不调用 's 回调呢?如何让该节点扩展?

  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 回答