スクリーンレットのモデルクラスの作成と使用
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Liferayのスクリーンは、典型的にLiferayのインスタンスからエンティティを受け取る :[ANYOBJECT文字列]
、 列
エンティティの属性となる ANYOBJECT
属性の値です。 スクリーンレット全体でこれらのディクショナリオブジェクトを使用できますが、多くの場合、対応するLiferayエンティティを表すオブジェクトに変換する モデルクラス を作成する方が簡単です。 これは、多くの属性と値のペアで構成される複雑なエンティティにとって特に便利です。 Liferayの画面がすでに提供していることに注意してください いくつかのモデルクラス 、あなたのために。
この時点で、「うーん! 複雑なエンティティがあり、Screensはそれらのモデルクラスを提供しません\! 私はただあきらめて、サッカーを見るつもりです。」フレットnot \! 私たちはあなたとサッカーの間には決して来ませんでしたが、独自のモデルクラスを作成して使用するのは簡単です。
使用 サンプルの高度なバージョンをブックマークScreenlet追加 、あなたのScreenletでモデルクラスを作成して使用する方法このチュートリアルは、一例として。 最初に、モデルクラスを作成します。
モデルクラスの作成
モデルクラスには、サーバーから返される各 [String:AnyObject]
を、対応するLiferayエンティティを表すモデルオブジェクトに変換するために必要なすべてのコードが含まれている必要があります。 これには、各 [String:AnyObject]
を保持するための定数、この定数を設定するイニシャライザー、および各属性値のパブリックプロパティが含まれます。
たとえば、サンプルのブックマークスクリーンレットの追加は、Liferayインスタンスのブックマークポートレットにブックマークを追加します。 ブックマークを追加するMobile SDKサービスメソッドも [String:AnyObject]
として返すため、スクリーンレットはそれをブックマークを表すオブジェクトに変換できます。 ブックマーク
モデルクラスます。 このクラスは、NSObject を 拡張し、 <code>[String:AnyObject]
を初期化子を介して 属性
定数に設定します。 このクラスは、各ブックマークの名前とURLの属性値を返す計算プロパティも定義します。
@objc public class Bookmark : NSObject {
public let attributes: [String:AnyObject]
public var name: String {
return attributes["name"] as! String
}
override public var description: String {
return attributes["description"] as! String
}
public var url: String {
return attributes["url"] as! String
}
public init(attributes: [String:AnyObject]) {
self.attributes = attributes
}
}
次に、モデルクラスを機能させます。
モデルクラスの使用
モデルクラスが存在するようになったので、スクリーンレットが結果を処理する任意の場所でモデルオブジェクトを使用できます。 正確な場所は、スクリーンレットが使用するスクリーンレットコンポーネントによって異なります。 たとえば、ブックマークの追加スクリーンレットのコネクタ、インタラクター、デリゲート、およびスクリーンレットクラスはすべて、スクリーンレットの結果を処理します。 したがって、ここの手順では、これらの各コンポーネントでモデルオブジェクトを使用する方法を示します。 ただし、スクリーンレットにはコネクタまたはデリゲートがない場合があることに注意してください。これらのコンポーネントはオプションです。 したがって、該当する場合、これらの手順のバリエーションが記載されています。
-
[String:AnyObject]
結果が発生するモデルオブジェクトを作成します。 たとえば、[文字列:AnyObject]
、ブックマークの追加スクリーンレットはコネクタで生成されます。 したがって、ここでスクリーンレットはブックマーク
オブジェクトを作成します。 スクリーンレットのコネクタ(AddBookmarkLiferayConnector
)の次のコードはこれを行います。 サービス呼び出しに続くif
ステートメントは、結果を[String:AnyObject]
にキャストし、それらの結果でBookmark
イニシャライザーを呼び出し、結果のBookmark
オブジェクトをpublicresultBookmarkInfo
変数に格納します。 これは、サービス呼び出しを行い、Bookmark
オブジェクトを作成するコードのみであることに注意してください。 完全なAddBookmarkLiferayConnector
クラスを表示するには、ここをクリックしてください。... // Public property for the results public var resultBookmarkInfo: Bookmark? ... override public func doRun(session session: LRSession) { let service = LRBookmarksEntryService_v7(session: session) do { let result = try service.addEntryWithGroupId(LiferayServerContext.groupId, folderId: folderId, name: title, url: url, description: "Added from Liferay Screens", serviceContext: nil) // Creates Bookmark objects from the service call's results if let result = result as? [String: AnyObject] { resultBookmarkInfo = Bookmark(attributes: result) lastError = nil } ... } ... }
ScreenletにConnectorがない場合、Interactorの
start
メソッドはサーバー呼び出しを行い、その結果を処理します。 それ以外の場合、[String:AnyObject]
からブックマーク
オブジェクトを作成するプロセスは同じです。 -
スクリーンレットのインタラクターでモデルオブジェクトを処理します。 Interactorはスクリーンレットの結果を処理するため、モデルオブジェクトも処理する必要があります。 スクリーンレットがコネクタを使用しない場合は、前の手順の最後で説明したように、Interactorの
start
メソッドで既にこれを実行しています。 ただし、スクリーンレットがコネクタを使用する場合、これはInteractorのcompletedConnector
メソッドで発生します。 たとえば、Add Bookmark ScreenletのInteractor(AddBookmarkInteractor
)のcompletedConnector
メソッドは、ConnectorのresultBookmarkInfo
変数を介してBookmark
を取得します。 このメソッドは、InteractorのpublicresultBookmark
変数にBookmark
を割り当てます。 これはBookmark
オブジェクトを処理するコードのみであることに注意してください。 完全なAddBookmarkInteractor
クラスを表示するには、ここをクリックしてください。... // Public property for the results public var resultBookmark: Bookmark? ... // The completedConnector method gets the results from the Connector override public func completedConnector(c: ServerConnector) { if let addCon = (c as? AddBookmarkLiferayConnector), bookmark = addCon.resultBookmarkInfo { self.resultBookmark = bookmark } }
-
Screenletがデリゲートを使用する場合、デリゲートプロトコルはモデルオブジェクトを考慮する必要があります。 デリゲートがない場合は、この手順をスキップしてください。 たとえば、ブックマークの追加スクリーンレットのデリゲート(
AddBookmarkScreenletDelegate
)は、ブックマーク
オブジェクトを通信する必要があります。 デリゲートの最初のメソッドは、2番目の引数を介してこれを行います。@objc public protocol AddBookmarkScreenletDelegate: BaseScreenletDelegate { optional func screenlet(screenlet: AddBookmarkScreenlet, onBookmarkAdded bookmark: Bookmark) optional func screenlet(screenlet: AddBookmarkScreenlet, onAddBookmarkError error: NSError) }
-
Screenletクラスの
interactor.onSuccess
クロージャーのInteractorからモデルオブジェクトを取得します。 その後、必要に応じてモデルオブジェクトを使用できます。 たとえば、Add Bookmark ScreenletのScreenletクラス(AddBookmarkScreenlet
)のinteractor.onSuccess
クロージャーは、InteractorのresultBookmark
プロパティからBookmark
取得します。 次に、デリゲートを介してブックマーク
を処理し。 この例では、クロージャは、ブックマークを追加するScreenletクラスのInteractorメソッドにあります(<code>createAddBookmarkInteractor
)。 Screenletクラスのinteractor.onSuccess
クロージャーがどこにある場合でも、必ずモデルオブジェクトを取得してください。 完全なを見るにはここをクリック<code> AddBookmarkScreenlet
:... private func createAddBookmarkInteractor() -> Interactor { let interactor = AddBookmarkInteractor(screenlet: self, folderId: folderId, title: viewModel.title!, url: viewModel.URL!) // Called when the Interactor finishes successfully interactor.onSuccess = { if let bookmark = interactor.resultBookmark { self.addBookmarkDelegate?.screenlet?(self, onBookmarkAdded: bookmark) } } // Called when the Interactor finishes with an error interactor.onFailure = { error in self.addBookmarkDelegate?.screenlet?(self, onAddBookmarkError: error) } return interactor } ...
驚くばかり\! これで、スクリーンレットでモデルクラスを作成して使用する方法がわかりました。