目的
SAPUI5のコントローラーでよく使うメソッドについてまとめます。
BaseControllerで実装されている処理
※バージョン1.60のテンプレートの場合
テンプレートからアプリを作った場合、共通処理をまとめたBaseControllerというコントローラーが自動的に作られます。BaseControllerはよく使う処理をラッピングしてくれているので、ラッピングされたメソッドを使うことができます。
Routerを取得
BaseControllerでの定義
getRouter : function () {
return UIComponent.getRouterFor(this);
}
コントローラーから呼び出すとき
//create画面に遷移
this.getRouter().navTo("create");
//notFound画面を表示
this.getRouter().getTargets().display("notFound");
モデルを取得
BaseControllerでの定義
getModel : function (sName) {
return this.getView().getModel(sName);
}
コントローラーから呼び出すとき
//ビューモデルを取得
this.getModel("createView");
//デフォルトモデル(主にOData)を取得
this.getModel();
ビューモデルを登録
BaseControllerでの定義
setModel : function (oModel, sName) {
return this.getView().setModel(oModel, sName);
}
コントローラーから呼び出すとき
var oViewModel = new JSONModel({
busy : true,
delay : 0
});
this.setModel(oViewModel, "createView");
i18nのテキストを取得
BaseControllerでの定義
getResourceBundle : function () {
return this.getOwnerComponent().getModel("i18n").getResourceBundle();
}
コントローラーから呼び出すとき
var sMeesage = this.getResourceBundle().getText("successMessage");
画面項目の操作
IDを指定して項目(オブジェクト)を取得
var oTable = this.byId("table");
項目の値を取得
var sName = this.byId("name").getValue();
項目の属性を変更
this.byId("edit").setEnabled(true);
setXXXで属性を設定、getXXXで属性を取得できる。
詳細は各コントローラーのメソッドを確認
例:sap.m.Button
バインドされた値の操作
バインドされたオブジェクトをJSON形式で取得
var oObject = this.getView().getBindingContext().getObject()
バインドされた値をキーを指定して取得
var sName = this.getView().getBindingContext().getProperty("Name")
//または
var sName = this.getView().getBindingContext().getObject().Name
バインドされたオブジェクトへのパスを取得
var sPath = this.getView().getBindingContext().getPath()
//リターンの例:/SalesOrderSet(5000000001)
イベントパラメータの操作
イベントハンドラメソッドで受け取る、イベントパラメータの操作について。
イベントを発生させる起因となったコントロールのオブジェクトを取得
例:リストの行が選択されたとき、行にバインドされたコンテキストを取得する
onPress : function (oEvent) {
var studentId = oEvent.getSource().getBindingContext().getProperty("StudentId");
}
イベントに渡されたパラメータを取得する
フィルタに検索条件を入力したときに呼ばれるイベントの例
onSearch : function (oEvent) {
var sQuery = oEvent.getParameter("query");
}
EventはSourceとParameterでできている
ので、基本的にそのどちらかを使うことになると思われます。