首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex Cairngorm 3表示模型初始化

Flex Cairngorm 3表示模型初始化
EN

Stack Overflow用户
提问于 2011-07-13 12:56:47
回答 1查看 436关注 0票数 1

好的,我打开了一个TitleWindow……我定义了6个州。我对我的所有视图都使用了表示模型模式。我发现了一个令人沮丧的细微差别。当我告诉我的窗口转到XXX状态时,控件必须初始化,因为flex中的状态使用延迟加载。所以..。我的PM代码说myTextArea.text会爆炸,并说“无法访问...”因此,作为一种解决方法,我在我的控件上创建了一些creationComplete事件,以便向PM注册控件因此,当状态改变时,文本区域最终被初始化,并且在creationComplete上调用PM.registerTextArea()来设置对它的引用。然后在这个函数中我运行我的代码。myTextArea.text..等。

这看起来像是一个丑陋的技巧,我讨厌它。有没有办法等到整个状态都在created中,然后在PM上调用代码?我试过enterstate...但此事件似乎会在状态控件准备就绪之前触发。

我试着添加评论,但我想编辑是我唯一的办法……

致所有人:感谢你的反馈。我正在做一些稍微偏离正题的事情。每个视图都有一个viewController (我称之为它们)。它有点像我自己的委托/数据提供者的混合体。但这是没有意义的。在处理状态时,flex组件的生命周期才是最痛苦的。如果你改变状态..没有事件会说“我所有处于这种状态的组件都准备好了”。唯一说“我们改变了状态”的事件。因此,我在状态改变时触发的代码试图与尚未准备好的组件进行对话。因此,在我看来,似乎没有设计模式或完美的方法来确保所有组件都是在一个状态下创建的,除非在状态中的每个组件上使用creationComplete来注册它是准备就绪的……如果不这样做,就会出现竞争条件。不管是框架还是设计模式,这似乎是一个根本问题。

textarea是一个简单的PM修复程序。只需将其绑定到pm值。但有些时候我不能。

具体地说,我正在尝试在达到该状态后将视频附加到显示器上。这是通过addchild完成的。不管我在哪里做..在调用addchild之前,我需要知道videoDisplay已经加载完毕。我甚至尝试过currentStateChange事件,因为文档上说触发持续...但可惜的是..处于该状态的组件仍在初始化中。所以看起来creationComplete是我唯一的选择。也许保持代码整洁的唯一明智方法是在进入状态后使用as创建整个东西(视频显示和视频)。我只希望flex框架有事件在这里帮助我,而不是在as中构建所有的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-13 21:08:36

由于您的PM具有对可视化组件(myTextArea)的引用,因此这不是表示模型的完全纯形式。它看起来更像是一种监督式的演示者/控制器类型的设置。

也就是说,我解决问题的方法是直接使用一个完整的presenter (根本不了解视图)或使用一个完整的控制器( view实现了一个接口,控制器通过这个接口进行通信)。在Flex中使用presenter的好处是,你可以创建一个可绑定值,比如text或selectedItem,只要它在线,视图就会绑定到该变量,这样处理Flex组件生命周期的问题就会消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6674275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档