【问题标题】:Expand node not calling callback展开节点不调用回调
【发布时间】:2012-11-21 21:38:45
【问题描述】:

我正在使用 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()的回调没有被调用呢?如何让该节点展开?

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


编辑:

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

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

【问题讨论】:

  • 谁能帮帮我...

标签: extjs extjs4.1


【解决方案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;
         });
      });

【讨论】:

    【解决方案2】:

    源中有一些复杂的逻辑来告诉节点它是否需要扩展或可扩展。看看下面的代码,当我试图以编程方式操作树时,我最终求助于它:

    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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多