Flex:关闭标题窗口后如何将值从标题窗口传递到主窗口?

时间:2009-02-23 09:30:46

标签: flex

我一直在网上搜索,但我找不到答案。我有标题窗口中的数组数据,我需要在关闭标题窗口后直接传递给主窗口。

继承我主窗口上的代码

    private function showWindow():void 
    {
    var dataCntnrsForTxt: Array = new Array;
    var ttlWindow:addQuest=addQuest(PopUpManager.createPopUp(this, addQuest, true));

    pointer.x=btnaddQuestion.x;
    pointer.y=btnaddQuestion.y;                
    pointer=btnaddQuestion.localToGlobal(pointer);
    ttlWindow.x=pointer.x-500;
    ttlWindow.y=pointer.y;


    ttlWindow.dataCntnrsForTxt= dataCntnrsForTxt;                      

    var i: int;
    for (i = 0; i < dataCntnrsForTxt.length; i++)
{
  var lblshow: Label = new Label;
      lblcntnrs.addChild(lblshow);
      lblshow.text = dataCntnrsForTxt[i];       
    }


   }

我希望在关闭标题窗口后自动将结果显示到主窗口

继承标题窗口上的代码

  [Bindable]
  public var dataCntnrsForTxt: Array = new Array;

  private function trythis():void
  {
  var i:int;
  for (i = 0; i < contnrs.numChildren; i++)
   {
    dataCntnrsForTxt.push(TextInput(contnrs2.getChildAt(i)).text);             
   }
  PopUpManager.removePopUp(this);
  } 

我是flex编程的新手。提前感谢您的帮助

3 个答案:

答案 0 :(得分:3)

我建议在标题窗口关闭时调度事件。该事件还可以存储要在属性中返回的值。然后,在主应用程序中处理该事件。

答案 1 :(得分:2)

事件是一种常见的方法,因为他们将标题窗口与主窗口分离,因此另一个答案是好的。他们是进入Flex的好习惯,值得付出努力,所以这可能是最好的答案。

让你的数组在主窗口上成为一个公共可绑定变量并从你的标题窗口填充它是第二种方式,但我不喜欢这种方法,因为这两个组件对彼此了解太多并且你依赖于数据绑定可能比你实际需要的更多(例如,如果你将主窗口中的控件绑定到同一个数组,它将在你的标题窗口显示时在后台忙于更新。这意味着你有一个繁琐的“取消“如果你需要,可以处理。”

为了给你第三种方法,你可以将一个函数传递给你的标题窗口,当窗口关闭时它会被调用。例如在你的标题窗口中你有声明......

public var onClose:Function;

在标题窗口上写一个处理程序,绑定到close事件,该事件调用外部函数并传递数组......

private function doClose():void
{
    if (onClose != null) onClose(myArray);
}

然后调用者必须有一个可以调用的函数......

private function handleTitleWindowClose(myArray:Array):void
{
    // do something in here
}

并在显示之前将其传递给TitleWindow类...

ttlWindow.onClose = handleTitleWindowClose;

这可能不如事件好,但比共享的魔术变量更好。它不是一个明确的API,因为onClose的参数没有在任何地方记录,编译器也不会在参数列表中找到错误,但是知道它是有用的模式。

HTH

答案 2 :(得分:0)

var dataCntnrsForTxt: Array = new Array;

这是一个局部变量,它的范围仅限于showWindow()函数。有一次,你没有它,你不应该玩它。或者,你可以从函数返回它(而不是void使用数组)。

[Bindable]
public var dataCntnrsForTxt: Array = new Array;

这样更好。您现在可以从任何地方访问它。请注意,如果要绑定它,使用ArrayCollection会更好始终。这是Flex 3.2 documentation

  

定义使用数组作为数据绑定表达式源的数据绑定表达式时,该数组应为ArrayCollection类型,因为ArrayCollection类在数组或数组元素更改为触发数据绑定时调度事件。例如,对ArrayCollection.addItem(),ArrayCollection.addItemAt(),ArrayCollection.removeItem()和ArrayCollection.removeItemAt()的调用都会触发数据绑定。

您可以尝试使用ArrayCollection吗?