テンプレート

このサンプルではコンボコントロールのドロップダウンリストのレイアウトをテンプレートに設定することで、項目に画像を表示したり、多段形式で表示することが確認できます。

コンボコントロールでは、ドロップダウンリストのレイアウトをテンプレートを使用して設定することが可能です。 概要 テンプレートを使用することで、リストアイテム上に画像を表示したり、多段形式で表示することが可能です。 たとえば、ドロップダウン表示されるリストアイテムのレイアウトを「1列目に画像」、「2列目を2段構成(テキスト)」、「3列目を1段構成(テキスト)」とし、表示する値はオブジェクト配列などの連結データから取得する場合、設定するテンプレートデータの構成は、以下のようになります。 なお、テンプレートはデータ部だけではなく、ヘッダー部とフッター部にもそれぞれ設定することが可能です。 また、フッター部には静的なテキストやHTMLに加えて、下記のように下記のようにJavaScriptコードを記述して実行することができます。
import '@mescius/inputman/CSS/gc.inputman-js.css'; import './styles.css'; import { InputMan } from '@mescius/inputman'; import employees from './data'; InputMan.appearanceStyle = InputMan.AppearanceStyle.Modern; const gcComboBox = new InputMan.GcComboBox(document.getElementById('gcComboBox'), { items: employees, itemHeight: 42, displayMemberPath: 'name', valueMemberPath: 'name', dropDownWidth: 290, itemTemplate: `<div class="template-item"> <div class="id">{!id}</div> <div class="image"><img src="{!image}"></div> <div class="name"><ruby>{!lastName}<rt>{!lastKana}</rt></ruby>&nbsp;<ruby>{!firstName}<rt>{!firstKana}</rt></ruby></div> <div class="note">{!office}<br>{!department}</div> </div>`, headerTemplate: '<div class="template-item"><div class="id">ID</div><div class="image">写真</div><div class="name">氏名</div><div class="note">所属</div></div>', footerTemplate: `<div> <span>選択されている項目: {!instance.getSelectedItem() == null ? '何も選択されていません' : instance.getSelectedItem().name}</span> </div>` });
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>コンボコントロール - テンプレート</title> <!-- SystemJS --> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> window.onload = function() { System.import('./src/app'); } </script> </head> <body> <select id="gcComboBox"></select> </body> </html>
body { min-height: 350px; } .viewport { line-height: 1.2; } .template-item { display: flex; } .template-item > * { display: flex; justify-content: center; align-items: center; } .id { width: 40px; } .image { width: 50px; } .image img { width: 40px; } .name { width: 110px; justify-content: initial; padding-left: 5px; } .name ruby { font-size: 16px; font-weight: bold; color: #2676c0; } .name rt { font-weight: initial; color: grey; } .list-item[selected="true"] .name ruby, .list-item[selected="true"] .name rt { color: white; } .note { width: 70px; }
module.exports = [ { id: 105, name: '森上 偉久馬', lastKana: 'モリウエ', firstKana: 'イクマ', lastName: '森上', firstName: '偉久馬', office: '東京本社', department: '第一営業', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/man1.png', tel: '090-1111-1111' }, { id: 107, name: '葛城 孝史', lastKana: 'カツラギ', firstKana: 'コウシ', lastName: '葛城', firstName: '孝史', office: '東京本社', department: '第二営業', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/man2.png', tel: '090-2222-2222' }, { id: 110, name: '加藤 泰江', lastKana: 'カトウ', firstKana: 'ヤスエ', lastName: '加藤', firstName: '泰江', office: '東京本社', department: '第一営業', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/woman1.png', tel: '090-3333-3333' }, { id: 204, name: '川村 匡', lastKana: 'カワムラ', firstKana: 'タダシ', lastName: '川村', firstName: '匡', office: '大阪支社', department: '営業開発', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/man3.png', tel: '090-4444-4444' }, { id: 207, name: '松沢 誠一', lastKana: 'マツザワ', firstKana: 'セイイチ', lastName: '松沢', firstName: '誠一', office: '大阪支社', department: '営業開発', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/man4.png', tel: '090-5555-5555' }, { id: 210, name: '成宮 真紀', lastKana: 'ナルミヤ', firstKana: 'マキ', lastName: '成宮', firstName: '真紀', office: '大阪支社', department: '営業一', image: '$IMDEMOROOT$/ja/samples/comboBox/itemTemplate/img/woman2.png', tel: '090-6666-6666' }, ];
body { min-height: 350px; } [gcim-control-appearance="modern"] .viewport { line-height: 1.2; } [gcim-control-appearance="modern"] .template-item { display: flex; } [gcim-control-appearance="modern"] .template-item > * { display: flex; justify-content: center; align-items: center; } [gcim-control-appearance="modern"] .id { width: 40px; } [gcim-control-appearance="modern"] .image { width: 50px; } [gcim-control-appearance="modern"] .image img { width: 40px; } [gcim-control-appearance="modern"] .name { width: 110px; justify-content: initial; padding-left: 5px; } [gcim-control-appearance="modern"] .name ruby { font-size: 16px; font-weight: bold; color: #2676c0; } [gcim-control-appearance="modern"] .name rt { font-weight: initial; color: grey; } [gcim-control-appearance="modern"] .list-item[selected="true"] .name ruby, [gcim-control-appearance="modern"] .list-item[selected="true"] .name rt { color: white; } [gcim-control-appearance="modern"] .note { width: 70px; }
System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/inputman': 'npm:@mescius/inputman/index.js', '@mescius/inputman/CSS': 'npm:@mescius/inputman/CSS', 'css': 'npm:systemjs-plugin-css/css.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel/systemjs-babel-browser.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' }, } });