簡體   English   中英

盡管模型未更改,但仍更新視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM