前回作成した初期環境を元に、サイドツリーを外部Jsonから読み込む処理を作成してみました。
Jsonを読み込む関数を追加する
サイドツリーには、外部から設定を読み込むプロパティも無ければメソッドもありません。
ですので別途Jsonを読み込む、下記の関数を「script.js」に追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
async function getJson(url) { var json await fetch(url).then(function(response) { return response.text(); }).then(function(text) { var parser = function reviver(k, v) { if (typeof v === 'string' && v.match(/^function/)) { return Function.call(this, 'return ' + v)(); } return v; }; json = JSON.parse(text, parser); }); return json; } |
サイドツリーの項目と、Jsonに定義してあるfunctionも読み込めるようにしてみました。
サイドツリー用のJsonファイルを作成する
dataフォルダに、「side.json」として下記内容を保存しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "name": "sidebar", "nodes": [ {"id": "level-1","text": "Level 1","img": "icon-folder","expanded": true,"group": true, "nodes": [ {"id": "level-1-1","text": "Level 1.1","icon": "fa-home"}, {"id": "level-1-2","text": "Level 1.2","icon": "fa-star"}, {"id": "level-1-3","text": "Level 1.3","icon": "fa-star-empty"} ] }, {"id": "level-2","text": "Level 2","img": "icon-folder","expanded": true,"group": true, "nodes": [ {"id": "level-2-1","text": "Level 2.1","img": "icon-folder","count": 3, "nodes": [ {"id": "level-2-1-1","text": "Level 2.1.1","icon": "fa-star-empty"}, {"id": "level-2-1-2","text": "Level 2.1.2","icon": "fa-star-empty","count": 67}, {"id": "level-2-1-3","text": "Level 2.1.3","icon": "fa-star-empty"} ] }, {"id": "level-2-2","text": "Level 2.2","icon": "fa-star-empty"}, {"id": "level-2-3","text": "Level 2.3","icon": "fa-star-empty"} ] } ], "onClick":"function(event){\nconsole.log('id: ' + event.target);\n}" } |
サイドツリーJsonを読み込みレイアウトに設定
下記コードで、サイドツリーJsonを読み込みw2uiのサイドツリーとして展開後に、レイアウトのleftに設定してます。
1 2 3 4 5 |
getJson('data/side.json').then(value => { var sidebar = value; $().w2sidebar(sidebar); w2ui['layout'].content('left', w2ui['sidebar']); }); |
まとめ
js/script.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
$(function () { var wheight=$(window).height()-15; $("#main").css("height",wheight); w2utils.locale('locale/ja-jp.json'); $('#main').w2layout(layout); $().w2grid(grid); w2ui['layout'].content('main', w2ui['grid']); //サイドツリーの読み込み getJson('data/side.json').then(value => { var sidebar = value; $().w2sidebar(sidebar); w2ui['layout'].content('left', w2ui['sidebar']); }); //ウィンドウリサイズ時 $(window).resize(function() { if ($(document.body).hasClass('print')==false ) { //現在のウィンドウ高さを取得し、要素に設定 var wheight=$(window).height()-15; $("#main").css("height",wheight); } }); }); //パネルスタイル var pstyle = 'border: 1px solid #dfdfdf; padding: 5px;'; // レイアウト設定 var layout = { name: 'layout', padding: 4, panels: [ { type: 'left', size: 200, resizable: true, style: pstyle, content: 'left' }, { type: 'main', style: pstyle, content: 'main' }, ] }; // グリッド設定 var grid = { name: 'grid', url: 'data/list.json', method: 'GET', columns: [ { field: 'fname', caption: 'First Name', size: '30%' }, { field: 'lname', caption: 'Last Name', size: '30%' }, { field: 'email', caption: 'Email', size: '40%' }, { field: 'sdate', caption: 'Start Date', size: '120px' } ] }; /** * JSONデータを取得する */ async function getJson(url) { var json await fetch(url).then(function(response) { return response.text(); }).then(function(text) { var parser = function reviver(k, v) { if (typeof v === 'string' && v.match(/^function/)) { return Function.call(this, 'return ' + v)(); } return v; }; json = JSON.parse(text, parser); }); return json; } |
data/side.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "name": "sidebar", "nodes": [ {"id": "level-1","text": "Level 1","img": "icon-folder","expanded": true,"group": true, "nodes": [ {"id": "level-1-1","text": "Level 1.1","icon": "fa-home"}, {"id": "level-1-2","text": "Level 1.2","icon": "fa-star"}, {"id": "level-1-3","text": "Level 1.3","icon": "fa-star-empty"} ] }, {"id": "level-2","text": "Level 2","img": "icon-folder","expanded": true,"group": true, "nodes": [ {"id": "level-2-1","text": "Level 2.1","img": "icon-folder","count": 3, "nodes": [ {"id": "level-2-1-1","text": "Level 2.1.1","icon": "fa-star-empty"}, {"id": "level-2-1-2","text": "Level 2.1.2","icon": "fa-star-empty","count": 67}, {"id": "level-2-1-3","text": "Level 2.1.3","icon": "fa-star-empty"} ] }, {"id": "level-2-2","text": "Level 2.2","icon": "fa-star-empty"}, {"id": "level-2-3","text": "Level 2.3","icon": "fa-star-empty"} ] } ], "onClick":"function(event){\nconsole.log('id: ' + event.target);\n}" } |
Javaスクリプトあまり得意では無いので、もっと良い方法があるかもしれません(;^_^A