2011-08-12 87 views
0

我有一个关于如何从弹出窗口访问主窗口变量的问题。在弹出窗口中重新加载主窗口的变量

创建在主窗口中的弹出窗口,并通过可变“内容”到这个弹出窗口为以下代码:

<mx:Script> 
    <![CDATA[ 
    // ...... 
    popwin = PopUpManager.createPopUp(UIComponent(parentApplication), PopupWindow, true) as PopupWindow; 
    popwin.parentView = this; // parentView is an IFlexDisplayObject 
    popwin.content = content; 
    PopUpManager.centerPopUp(popwin); 
    // ...... 
    ]]> 
</mx:Script> 

在popwin,我改变的“内容”的变量的值,但我当点击popwin上的“重置”按钮时,要重置“内容”的值。

我知道,我派遣在popwin窗口的事件,并在主窗口 代码片段popwin添加监听器:

parentView.dispatchEvent(new CustomEvent(CustomEvent.RESET)); 

代码片段在主窗口:

addEventListener(CustomEvent.RESET, resetContent); 

public function resetContent():void{ 
    this.content = loadContent(); 
} 

但价值“内容”在popwin中不重置。

有什么我错过了吗?

是否有任何其他方法来更新弹出窗口中的“内容”?

=====================问题更新于15/8/2011 ================= =============

我用下面的popwin的createComplete代码()函数:

BindingUtils.bindProperty(textInput, "text", content, "name", false); 

当我改变TextInput文本的价值和重置内容,将其加载我的跟踪日志中的content.name的原始值,但textInput的文本值不会恢复为原始值。

如果我使用下面的代码,而不是BindingUtils.bindProperty:

[Bindable] 
public var content:Content; 
...... 
<mx:TextInput id="textInput" text="{content.name}" /> 

,做同样的动作,content.name被重新加载在我的跟踪日志,但文本值设置为空白,为textInput。

有人知道为什么吗?

回答

0

尝试使用:再次

popwin = PopUpManager.createPopUp(UIComponent(parentApplication), PopupWindow, true) as PopupWindow; 
popwin.parentView = this; // parentView is an IFlexDisplayObject 
popwin.content = content; 
BindingUtils. bindProperty(popwin, "content", this, "content", false, true); 
PopUpManager.centerPopUp(popwin); 
+0

我以为bindProperty可以工作,但它不适合我。 “内容”是popwin中的一个对象,它将是中继器组件的dataProvider。当我更改该转发器组件的文本值并尝试重置它时,它不会加载原始值。 – Wei

+0

我试图找到重置时数据提供程序不更新的位置和原因。也许是由于其他原因。但如果有人有一些建议,请在这里发表您的评论。非常感谢你。 – Wei

+0

在'this.content = loadContent()'这一行中,您将this.content的指针更改为另一个内存区域,但弹出窗口的content属性的指针仍然指向前一个区域。数据绑定在ActionScript中不起作用。您可以使用'BindingUtils'调用绑定,我无法理解为什么这个解决方案不适合您的体系结构,而绑定完全适合您的需求? – Constantiner

0

只需设置内容。

public function resetContent():void{ 
    if (popwin != null){ 
    popwin.content = this; 
    } 
}