2012-11-20 3 views
2

Jasmine으로 ExtJs App을 테스트하고 있습니다. 그래서 아무런 견해도 없습니다.확장 노드가 콜백을 호출하지 않습니다.

여러 개의 노드를 확장하고 싶지만 처음에는 내 루트 노드를 사용하고 싶습니다. 그러나 노드를 확장하는 것조차 실패합니다.

코드 :

난 후, 내 TreeStore을 만들 load에 대한 나의 리스너가 호출되는

// 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?"); 
}); 

을하지만, beforeexpand에 대한 리스너가 호출되지 않습니다. 다음 load 청취자는 말한다 호출되는

나는 상점 작성 후 처음에 oStore.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'); 
} 
관련 문제