[英]Update the view although the model hasn't changed
我的應用程序根據模型調度的事件更新視圖。 但是,如果模型沒有改變,但是我仍然需要更新視圖,該怎么辦? 例如,我關閉並重新打開了一個彈出窗口。 要顯示的數據沒有更改,但是必須重新創建彈出介體和視圖。 我當前的解決方案是在中介器的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);
}
將模型注入調解器不是一個好主意,所以我想知道在模型不變的情況下初始化視圖的最佳方法是什么?
好,
我想你有View1,你有彈出按鈕。
View2是您的主力軍。
因此,當單擊View1按鈕時,您將從主調解器調度一個事件,該事件轉到popupCommand,在該事件中將彈出窗口添加到contextView或從中刪除它。
您還可以在模型中擁有一個狀態,該狀態將顯示popupVisible,並且當您更改該屬性時,將調度一個事件,該事件在主介體中偵聽並添加或刪除彈出窗口。 在那種情況下,命令將更改model屬性,而不是將彈出窗口直接添加到contextView中。
第三種方法是在視圖內部手動添加彈出窗口,並且由於該機械手正在偵聽舞台,因此彈出窗口將自動進行調解。
我決定添加一個名為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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.