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

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

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

在该组件中,我有一个用于绑定到“meetingInfo”的 DataGroup 组件的 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。

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

我已经进行了几天的故障排除,但终生无法解决。

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

4

1 回答 1

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));
    }
}

因此,如果您没有重新创建MeetingInfoModelsetter 的实例,则不会被触发。

于 2013-01-22T19:44:22.143 回答