2010-09-21 3 views
0

Я пытаюсь вызвать функцию и передать ей несколько свойств, но она жалуется, что объект, к которому я пытаюсь установить цель, равен нулю. Может ли кто-нибудь увидеть, где я ошибаюсь?Возвращаемое значение вместо null

<mx:ViewStack id="vs" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%" backgroundColor="#ff9900" showEffect="WipeDown" hideEffect="WipeUp"> 
     <mx:Label text="Community"/> 
    </mx:Canvas> 
    <mx:Canvas id="view2" label="Apps" width="100%" height="100%" backgroundColor="green"> 
     <mx:HTML id="myHTML" width="100%" height="100%" 
     visible="true" 
     paintsDefaultBackground="true" 
     htmlRender="browser_completeHandler(event)" 
     locationChange="browser_locationChangeHandler(event)" 
     complete="browser_completeHandler(event)" /> 
    </mx:Canvas> 
</mx:ViewStack> 


<local:DockBar id="dockbar" horizontalCenter="0" bottom="0" width="100%" height="100" minSize="32" maxSize="80"> 
    <mx:Label visible="false" id="menuLabel" text="Menu" bottom="0" horizontalCenter="0" fontSize="24" color="#ffffff" alpha=".75" /> 
    <mx:Image click="gotoApp('Google','http://www.google.com/')" source="{icon1}" buttonMode="true" useHandCursor="true" toolTip="Nice red" rollOver="turnOn(event)" rollOut="turnOff(event)" /> 
    <mx:Image click="gotoApp('Yahoo','http://www.yahoo.com/')" source="{icon2}" buttonMode="true" useHandCursor="true" toolTip="Cool orange" rollOver="turnOn(event)" rollOut="turnOff(event)" /> 
    </mx:HBox> 
</local:DockBar> 

и функция выглядит следующим образом:

private function gotoApp(id:String,url:String):void { 
    vs.selectedChild=view4; 
    trace(myHTML); 
} 

Это возвращение нулевой первый раз, когда я щелкните изображение, однако последующие попытки прослеживает значение (я предполагаю, потому что он установлен, то просто не тогда, когда загрузка приложения). Любые идеи, как распознать его при загрузке приложения?

Приветствие

ответ

1

Ну «view4» не ребенок вашего ViewStack, так что его собирается бросить пустой указатель, когда он пытается переложить свои ребенок.

Причина она не бросает его во второй раз, вероятно, из-за чего-то вроде

public function set selectedChild(child : Object) : void { 
    if (child == _selectedChild) return; 
    ... 
} 

Это довольно распространенный вид в сеттеров.

1

Предполагая, что «view4» - это опечатка, и вы имели в виду «view2», вы можете установить для creationPolicy на ViewStack значение «all». По умолчанию ViewStacks только создает экземпляр первого представления при создании, устанавливая createPolicy на «все», чтобы заставить все представления в стеке получить экземпляр.

1

ViewStack, по умолчанию, создает свои дети лениво в документе-порядке, поэтому только первый ребенок, который будет виден при загрузке (например, view1), не будет иметь нулевого идентификатора в вашей функции. Последующие щелчки на ViewStack создадут другие представления (view2, view3 и view4), поэтому ошибка больше не будет выполняться.

Так что вам нужно изменить код, чтобы включить creationPolicy = "все", чтобы исправить это:

<mx:ViewStack id="vs" creationPolicy="all" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%"> 
     ... 
    </mx:Canvas> 
     ... 
    <mx:Canvas id="view4" label="Apps" width="100%" height="100%"> 
     ... 
    </mx:Canvas> 
</mx:ViewStack> 
0

параметр Try, используя свойство SelectedIndex вместо:

vs.selectedIndex = 1; 

Таким образом, вы» не теряя при этом выгоды от отложенного экземпляра.

Смежные вопросы