我有一个关于如何从弹出窗口访问主窗口变量的问题。在弹出窗口中重新加载主窗口的变量
创建在主窗口中的弹出窗口,并通过可变“内容”到这个弹出窗口为以下代码:
<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。
有人知道为什么吗?
我以为bindProperty可以工作,但它不适合我。 “内容”是popwin中的一个对象,它将是中继器组件的dataProvider。当我更改该转发器组件的文本值并尝试重置它时,它不会加载原始值。 – Wei
我试图找到重置时数据提供程序不更新的位置和原因。也许是由于其他原因。但如果有人有一些建议,请在这里发表您的评论。非常感谢你。 – Wei
在'this.content = loadContent()'这一行中,您将this.content的指针更改为另一个内存区域,但弹出窗口的content属性的指针仍然指向前一个区域。数据绑定在ActionScript中不起作用。您可以使用'BindingUtils'调用绑定,我无法理解为什么这个解决方案不适合您的体系结构,而绑定完全适合您的需求? – Constantiner