我的应用更新视图以响应模型调度的事件。但是如果模型没有改变怎么办,但我仍然需要更新视图。例如,我已关闭并重新打开弹出窗口。要显示的数据没有更改,但必须重新创建弹出介体和视图。我目前的解决方案是强制在mediator的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);
}
将模型注入调解员并不是一个好主意,所以我想知道当模型没有改变时,启动视图的最佳方法是什么?
答案 0 :(得分:0)
那么,
我认为你有View1,你有弹出按钮。
View2是你的popus。
因此,当单击View1按钮时,您将从main mediator调度一个事件,该事件将转到popupCommand,您可以在其中将弹出窗口添加到contextView,或者将其删除。
你也可以在模型中有一个状态,即popupVisible,当你改变那个属性时,你会调度一个在主调解器中监听并添加或删除弹出窗口的事件。在这种情况下,命令会改变模型属性,而不是直接将弹出窗口添加到contextView。
第三种方法是在视图中手动添加弹出窗口,并且由于robotlegs正在监听舞台,弹出窗口将自动调解。
答案 1 :(得分: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;
}