2010-04-09 74 views
0

我有一个flex应用程序,我有一个左侧的TREE控件和一个viewstack在右边,当有人选择树时,它会根据树的XML的隐藏节点值加载命名的viewstack。 但它抛出一个错误1065变量没有定义在最后一次浏览器刷新/重新加载的视图堆栈上。这与我可以告诉它的一个特定的viewstack无关,似乎只是在某些渲染事件上抛出错误。 我试图在viewstack上使用creationpolicy =“all”,但它似乎没有任何帮助。viewstack导致错误1065变量未定义的问题?

public function treeChanged(event:Event):void { 

      selectedNode=Tree(event.target).selectedItem as XML; 
      //trace([email protected]); 
      //Alert.show([email protected]() + " *"); 

      if([email protected]() == '' || [email protected]() == null){ 
       //Alert.show("NULL !"); 
       return; 
      } 


      mainviewstack.selectedChild = Container(mainviewstack.getChildByName([email protected]())); //Container(mainviewstack.getChildByName([email protected])); 

如果我在一个警告框添加getchildbyname选项则ViewStack有时间来渲染,一切工作正常之前,所以这使我相信应用程序没有给它足够的时间来加载则ViewStack?

回答

0

错误发生在哪里?你有堆栈跟踪吗?你在哪里注册事件监听器treeChanged()

您可能会尝试在FlexEvent.CREATION_COMPLETE的事件侦听器中添加事件侦听器。所有的组件应该在那个时候被初始化。

您添加事件侦听器的方式对我来说看起来是正确的,但我不确定时间。因此,这里是增加了对CREATION_COMPLETE事件监听器(假设画布是你包含的元素)的例子:

<mx:Canvas creationComplete="onCreationComplete"> 
    <mx:Script><![CDATA[ 
      private function onCreationComplete():void { 
       tree.addEventListener(TreeEvent.Change, treeChange) 
      } 
     ]]> 
    </mx:Script> 
    <mx:Tree id="tree" ... /> 
</mx:Canvas> 

请不,我没有测试过这一点,我只是写下来在旅途中。有些名字可能是错的,但它应该给你正确的想法。

+0

错误发生在线 mainviewstack.selectedChild =容器(mainviewstack.getChildByName(selectedNode。@ hidden.toString())); //Container(mainviewstack.getChildByName([email protected])); 我寄存器树变化这里 的 你能给我一个关于如何使用FlexEvent.creation完成的例子吗? – Jason 2010-04-12 12:57:56

+0

我也使用flex sdk 3.0我应该升级它吗? – Jason 2010-04-12 13:01:35

+0

ReferenceError:错误#1065:变量未定义。 \t at global/flash.utils :: getDefinitionByName() \t at mx.utils :: DescribeTypeCache $/describeType()[C:\ autobuild \ 3.4.0 \ frameworks \ projects \ framework \ src \ mx \ utils \ DescribeTypeCache .as:95] \t at mx.utils :: ObjectUtil $/getClassInfo()[C:\ autobuild \ 3.4.0 \ frameworks \ projects \ framework \ src \ mx \ utils \ ObjectUtil.as:838] \t at mx.controls :: DataGrid/generateCols()[C:\ autobuild \ 3.4.0 – Jason 2010-04-12 13:17:32