3

は、同じアクティビティ インスタンスを2 回以上CachingActivityMapper要求すると、同じアクティビティ インスタンスを返します。Placeただし、現在の場所と同じ場所にいた場合、 a は起動しませPlaceControllerPlaceChangeRequestEvent(最終的には no PlaceChangeEvent) goTo(...)。その結果、ActivityManagerこれらのイベントをリッスンしても何も実行されません。つまりCachingActivityMapper、この場合、アクティビティを要求することさえありません。

だから、私は本当にのポイントがわかりませんCachingActivityMapper。何か不足していますか?

4

1 に答える 1

4

CachingActivityMapper単独で使用する場合は、ほとんど (またはまったく) 役に立ちません。FilteredActivityMapperこれは、 aと yourのようなものの間にあることを実際に意味していますActivityMapper

元のユースケースはマスター/ディテールでした。たとえば、2ActivityManagerつのメール アプリの場合、1 つはメールのリスト (マスター) 用で、もう 1 つは特定のメッセージ (詳細) 用です。マスターに集中しましょう:

  1. 現在の場所はMailBox("inbox")
    1. FilteredActivityMapperその場所をそのまま下層に渡しますCachingActivityMapper
    2. 実際ActivityMapperには、「受信トレイ」内のメールのリストのアクティビティが返されます
  2. ユーザーがリスト内のメールをクリックして新しい場所に移動するMessage(box="inbox", id="123")
    1. FilteredActivityMapper場所を変えるMailBox("inbox")
    2. は、CachingActivityMapper実際にラップされたを呼び出すことなく、キャッシュされたアクティビティを返しますActivityMapper。そのためActivityManager、アクティビティを停止して開始したり、管理しているに触れたりすることはありませんHasOneWidget

バリアントが存在する可能性があります。たとえば、詳細マッパーは最後に見たメッセージプレースをキャッシュし (そのメッセージプレースには「メール ボックス」情報が含まれていませんMessage("123"))、MailBoxプレースを受け取ると、キャッシュされたアクティビティを返す、基になる へのメッセージの場所。これにより、詳細パネルに同じメッセージを表示したまま、マスターが新しいメール ボックスに変更CachingActivityMapperできるようになります(分割表示の GMail は多かれ少なかれこのように動作します)。

于 2015-09-03T13:02:53.740 に答える