iOSリストスクリーンレットのインタラクターの作成

iOSリストスクリーンレットのインタラクターの作成

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

インタラクターがスクリーンレットのアクションを実装することを思い出してください。 リストスクリーンレットでは、ユーザーが実行できるアクションは通常、エンティティの読み込みのみです。 流fluentなページネーションを実装するリストScreenletのInteractorクラスは、 BaseListPageLoadInteractor クラス拡張する必要があります。 Interactorクラスには、Screenletが必要とするプロパティ、およびそれらを設定する初期化子も含まれている必要があります。 この初期化子には、スーパークラス初期化子に渡す次のプロパティの引数も必要です。

  • スクリーンレットBaseListScreenlet リファレンス。 これにより、Interactorは常にスクリーンレット参照を保持します。
  • ページ:取得するページ番号。
  • computeRowCount:コネクターの doAddRowCountServiceCall メソッドを呼び出すかどうか。

たとえば、ブックマークリストスクリーンレットのInteractorクラスには、コネクタと同じ groupId および folderId プロパティと、それらを設定する初期化子が含まれています。 この初期化はまた、通過する screenletページ、及び computeRowCount スーパー初期の引数:

public class BookmarkListPageLoadInteractor : BaseListPageLoadInteractor {

    private let groupId: Int64
    private let folderId: Int64

    init(screenlet: BaseListScreenlet,
        page: Int,
        computeRowCount: Bool,
        groupId: Int64,
        folderId: Int64) {

            self.groupId = (groupId != 0) ? groupId : LiferayServerContext.groupId
            self.folderId = folderId

            super.init(screenlet: screenlet, page: page, computeRowCount: computeRowCount)
    }
    ...

Interactorクラスは、Connectorをインスタンス化してサーバーリクエストを開始し、結果をモデルオブジェクトに変換する必要もあります。 createListPageConnector メソッドをオーバーライドして、コネクターのインスタンスを作成して返します。 このメソッドは、最初に スクリーンレット プロパティを介してスクリーンレットへの参照を取得する必要があります。 コネクターの初期化子を呼び出すときは、 screenlet.firstRowForPage を使用して、ページ番号(ページ)をページの開始および終了インデックスに変換します。 groupIdなど、必要な他のプロパティも初期化子に渡す必要があります。 たとえば、 BookmarkListPageLoadInteractorcreateListPageConnector メソッドは、これを実行して BookmarkListPageLiferayConnector インスタンスを作成します。

public override func createListPageConnector() -> PaginationLiferayConnector {
    let screenlet = self.screenlet as! BaseListScreenlet

    return BookmarkListPageLiferayConnector(
        startRow: screenlet.firstRowForPage(self.page),
        endRow: screenlet.firstRowForPage(self.page + 1),
        computeRowCount: self.computeRowCount,
        groupId: groupId,
        folderId: folderId)
}

次に、 convertResult メソッドをオーバーライドして、各 [String:AnyObject] 結果をモデルオブジェクトに変換します。 スクリーンレットは、サーバーから取得したエンティティごとにこのメソッドを1回呼び出します。 たとえば、 BookmarkListPageLoadInteractorconvertResult メソッドは、 [String:AnyObject] 結果を Bookmark オブジェクトに変換します。

override public func convertResult(_ serverResult: [String:AnyObject]) -> AnyObject {
    return Bookmark(attributes: serverResult)
}

Interactorで オフラインモード をサポートすることもできます。 これを行うには、Interactorが cacheKey メソッドをオーバーライドして、スクリーンレットに固有のキャッシュキーを返す必要があります。 たとえば、 BookmarkListPageLoadInteractorcacheKey メソッドは、スクリーンレットの groupId および folderId 設定を含むキャッシュキーを返します。

override public func cacheKey(_ op: PaginationLiferayConnector) -> String {
    return "\(groupId)-\(folderId)"
}

すばらしいです\! 次に、スクリーンレットのデリゲートを作成します。

« iOSリストスクリーンレットのコネクタの作成iOSリストスクリーンレットのデリゲートの作成 »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています