View側になるべく手をつけずUIを作ってみる
はじめに
どうも!
SAPUI5の開発にて同じような構成の画面を大量に作る機会があり、
UIをController側で作る機会があったので
自分へのメモとして記事を書かせていただきます。
やりたいこと
View側をいじらずにUIを作成したい
ページを定義し、埋め込む
まず大元となるページを定義していきます。
ViewのXMLファイルは以下のような感じ。
<mvc:View controllerName="controllerName" xmlns:mvc="sap.ui.core.mvc" displayBlock="true" xmlns="sap.m">
<Shell id="shell">
<App id="app">
</App>
</Shell>
</mvc:View>
あらかじめAppにidを付与しておきます。(ここではappとしています。)
基本的にここからView側を触ることはありません。
Controller内で以下の内容の関数を定義し,Oninit内で呼び出します。
今回はsap.f.semantic.SemanticPageを使っていきます。
createPage: function () {
var app = this.getView().byId("app");
// ページ定義
var semanticPage = new sap.f.semantic.SemanticPage({
id: "semanticPage",
showFooter: false,
preserveHeaderStateOnScroll: false,
toggleHeaderOnTitleClick: true,
headerPinnable: true,
titleHeading: new sap.m.Title({
id: "title",
text: "テストページ"
})
});
app.addPage(semanticPage);
}
SemanticPageを定義し、app.addPageでPageを埋め込んでいます。
色々コンテンツを差し込んでみる
showFooterをtrueにするとフッターが出てきたりヘッダにボタンを追加することも可能です。
// ヘッダ部分に検索ボタンを追加
var titleMainAction = new sap.f.semantic.TitleMainAction({
id: "btSearch",
text: "検索",
press: function (oEvent) {
this.onSearch(oEvent);
}.bind(this)
});
semanticPage.setTitleMainAction(titleMainAction);
// ヘッダ部分に実行ボタンを追加
var footerCustomActions = new sap.m.Button({
id: "btExecute",
text: "実行",
enabled: false,
press: function (oEvent) {
this.onExecution(oEvent);
}.bind(this)
});
semanticPage.addFooterCustomAction(footerCustomActions);
ページのコンテンツ部にテーブルを差し込む関数も入れてみます。
createTableContents: function () {
var semanticPage = sap.ui.getCore().byId("semanticPage");
// テーブル生成
var Table = new sap.ui.table.Table({
id: "table",
visibleRowCount: 10,
rows: "{path:'data>/results'}",
width: "100%",
selectionMode: "None",
enableSelectAll: true,
ariaLabelledBy: "title",
columns: [],
showNoData: true,
fixedColumnCount: 1
});
//テーブルタイトルを追加
var Title = new sap.m.Title({
id: "tableTitle",
text: "テストテーブル"
});
var toolbar = new sap.m.Toolbar({
content: Title
});
Table.addExtension(toolbar);
// セマンティックページのコンテント部に追加する
semanticPage.setContent(Table);
}
ということであっという間にController側で簡易的なUIが完成しました
エラーが出てきて画面が表示されない
以下のようなエラーが出てくる場合は
TypeError: sap.f.semantic.SemanticPage is not a constructor
TypeError: sap.ui.table.Table is not a constructor
manifest.jsonファイルの"dependencies"部分の"libs"に以下の記述を追加します。
"sap.f": {},
"sap.ui.table": {},
終わりに
簡易的なページですがほぼViewには手を加えずにController側のみでページを作ることができました。
上記の関数に少し手を加えて共通関数として定義すれば、各々の画面のOninit内で呼び出すことで簡単に似たページを作ることができます。
もし似た構造のページを複数作成する機会がある方はご参考までに。
Author And Source
この問題について(View側になるべく手をつけずUIを作ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/ichi_highball/items/348507dc4af1bb32681f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .