1

我的应用程序更新视图以响应模型调度的事件。但是如果模型没有改变,但我仍然需要更新视图怎么办。例如,我关闭并重新打开了一个弹出窗口。要显示的数据没有更改,但必须重新创建弹出中介和视图。我目前的解决方案是在调解器的 onRegister() 方法中强制初始化,如下所示:

// Inside of PopUpMediator.as

[Inject]
public var popUpModel:IPopUpModel;

[Inject]
public var popUpView:PopUpView;

override public function onRegister()
{
    // Force initialization if the model hasn't changed
    popUpView.foo = popUpModel.foo;

    // Event based initialization
    addContextListener(PopUpModelEvent_foo.CHANGE, foo_changeHandler);        
}

将模型注入调解器不是一个好主意,所以我想知道在模型没有改变时初始化视图的最佳方法是什么?

4

2 回答 2

0

出色地,

我假设你有 View1,你有弹出按钮。

View2 是你的流行语。

因此,当单击 View1 按钮时,您会从主调解器调度一个事件,该事件将转到 popupCommand,您可以在其中将弹出窗口添加到 contextView 或将其删除。

您还可以在模型中拥有一个状态,即 popupVisible,当您更改该属性时,您将调度一个在主中介器中侦听并添加或删除弹出窗口的事件。在这种情况下,命令将更改模型属性,而不是将弹出窗口直接添加到 contextView。

第三种方法是在视图中手动添加弹出窗口,由于机器人腿正在监听舞台,弹出窗口将自动进行调解。

于 2013-11-06T22:23:55.547 回答
0

我决定添加一个名为PopUpViewInitEvent. 一条命令将检查模型是否在弹出窗口关闭时更新。如果不是,它将通过调度PopUpViewInitEvent. 该事件将包含初始化视图所需的所有数据。这样我就不必将模型注入到我的调解器中。

[Inject]
public var popUpView:PopUpView;

override public function onRegister()
{
    // Batch initialization
    addContextListener(PopUpViewInitEvent.INIT, batchInit);

    // Gradual initialization
    addContextListener(PopUpModelEvent_foo.CHANGE, foo_changeHandler);        
    addContextListener(PopUpModelEvent_bar.CHANGE, bar_changeHandler);        
}

protected function batchInit(event:PopUpViewInitEvent)
{
    popUpView.foo = event.foo;
    popUpView.bar = event.bar;
}
于 2013-11-07T08:10:02.933 回答