2013-01-22 49 views
0

我使用了一个表示模型的可绑定变量,并通过几个嵌套组件传递它。安装程序不总是被触发

顶级组件是我的变量:

[Bindable] 
private var meetingInfo:MeetingInfoModel; 

我初始化它在处理程序 “预初始化” 事件:

meetingInfo = MeetingInfoModel.getInstance(); 

我再传给它通到1个部分:

<meetingViewStack:MeetingViewStack meetingInfo="{meetingInfo}"/> 

在该组件中,我有以下内容:

private var _meetingInfo:MeetingInfoModel; 

public function set meetingInfo(model:MeetingInfoModel):void{ 
    _meetingInfo = model;} 

[Bindable] 
public function get meetingInfo():MeetingInfoModel{ 
    return _meetingInfo; 
     } 

我然后该变量传递到另一个嵌套组件:

<documentShare:DocumentPanel meetingInfo="{meetingInfo}"/> 

我在哪里具有相同的设定器/吸气剂设置。然后我再次将它传递到另一个嵌套组件:

<documentShare:AttachmentFilesPanel meetingInfo="{meetingInfo}" /> 

在该组件我有一个DATAGROUP部件,其中它结合“meetingInfo”一个的ItemRenderer:

<s:DataGroup id="attachmentsList" 
       width="100%" 
       clipAndEnableScrolling="true" 
       dataProvider="{meetingInfo.docsAndAttachmentsList}" 
       itemRenderer="com.fmr.transporter.view.documentShare.DocumentUploadRenderer" 
       visible="{meetingInfo.docsAndAttachmentsList.length > 0}">`enter code here` 

正如我更新“meetingInfo。 docsAndAttachmentsList”的ArrayCollection,在每个嵌套组件的制定者得到正确调用,直到....

...这是AIR应用程序,你要知道...

我注销并返回。然后,最后一个嵌套组件中的setter/getter这次不会被触发。

为什么,哦,为什么会发生这种情况?

我已经解决了几天,无法弄清楚我的生活。

感谢您的任何有用的提示!

+0

@ fsbmain的回答是正确的。但是,如果必须将模型对象的实例一直传递到显示层次结构中,可能会通过不关心此特定模型的对象,我会考虑使用IoC(Inversion of Control)容器将数据仅注入到这是必需的。目前[SwiftSuspenders](https://github.com/tschneidereit/SwiftSuspenders)是我选择的武器,因为它是唯一的“框架”,并且不会添加任何所谓的MVC功能。 – RIAstar

+0

非常好的主意,非常感谢。我会检查出来的。 – fumeng

回答

1

代码MeetingInfoModel.getInstance();暗示MeetingInfoModel是一个单身人士,是吗?如果是这样,二传手只会触发一次,由于使用mxmlc的生成对象实例改变了支票,对于SDK 4.5.1生成的代码将是这样的:

[Bindable(event="propertyChange")] 
public function set meetingInfo(value:MeetingInfoModel):void 
{ 
    var oldValue:Object = this.meetingInfo; 
    if (oldValue !== value) 
    { 
     this._883716727meetingInfo = value; 
     if (this.hasEventListener("propertyChange")) 
      this.dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this, "meetingInfo", oldValue, value)); 
    } 
} 

所以如果你没有重新创建实例的MeetingInfoModel设置将不会被触发。

+0

是的,它是一个单身人士,我绝对不会重新创建MeetingInfoModel的实例;我只更新我使用的ArrayCollections。也许这是我失踪的一块。 – fumeng

+0

如果是这样,检查_attachmentsList_列表中的_set dataProvider_的触发,它应该工作,而不是_meetingInfo_ – fsbmain

相关问题