2012-11-20 74 views
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()的回調不叫?我怎樣才能讓這個節點擴展?

  2. 爲什麼在調用oStore.load()時節點的孩子已經加載?之後,expand()也沒有被解僱。


編輯:

開始我的根節點與expanded: true正確地使上collapse()我的店鋪倒塌,但它expand()什麼都不做了。

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

任何人都可以幫助我請... – Patrick

回答

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