Setter并不总是被触发

时间:2013-01-22 18:01:04

标签: actionscript-3 flex air

我使用一个表示Model的可绑定变量,并通过几个嵌套组件将其传递下去。

顶级组件是我的变量:

[Bindable]
private var meetingInfo:MeetingInfoModel;

我在“preinitialize”事件的处理程序中初始化它:

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}"/>

我设置了相同的setter / getter。然后我再次将它传递给另一个嵌套组件:

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

在该组件中,我有一个DataGroup组件的ItemRenderer,它绑定到“meetingInfo”:

<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时,每个嵌套组件中的setter都会被正确调用,直到....

...这是一款AIR应用,请注意......

我退出并重新登录。然后,这次不会触发最后一个嵌套组件中的setter / getter。

为什么,为什么,这会发生?

我已经进行了几天的故障排除,并且无法解决我的生活问题。

感谢任何有用的提示!!

1 个答案:

答案 0 :(得分:1)

代码MeetingInfoModel.getInstance();暗示MeetingInfoModel是单身人士,是吗?如果是这样,setter将只触发一次,因为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的实例,则不会触发setter。