SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

作って学ぶ! 新人研修/Windowsストアアプリで電子カタログを作ろう

Windowsストアアプリでさまざまな情報を表示しよう

作って学ぶ! 新人研修/Windowsストアアプリで電子カタログを作ろう(5)

データの表示レイアウトを決めよう

 旅行カタログに表示するデータの用意ができたので、アプリに表示するための画面レイアウトを設定します。

情報の表示テンプレートを決める

 旅行カタログアプリ画面の中央左側のスペースに、旅行先情報(写真/タイトル/インフォメーション)を表示します。その際、各データをどのようにレイアウトして表示するかを定義する必要があります。そこで、default.htmlを開き、main-left要素の中を次のように修正します。

旅行先情報のテンプレート定義(default.htmlの抜粋)
<div id="main-left">
   <!-- 1. 旅行先情報の表示方法(テンプレート)を指定する -->
   <div id="travelTemplate" data-win-control="WinJS.Binding.Template">
      <!-- 画像(image)を表示 -->
        <img data-win-bind="src:image" height="550">
      <!--タイトル(title)を表示 -->
        <div data-win-bind="textContent:title"></div>
      <!--インフォメーション(info)を表示 -->
        <div data-win-bind="textContent:info"></div>
   </div>
</div>

 ここでは、テンプレートに「travelTemplate」というid属性を設定し、画像を高さ550ピクセルで表示し、その下にタイトルとインフォメーションを配置しています。

 画面のデザインとデータを紐づけるには、data-win-bind属性を指定します。data-win-bind属性は、HTMLタグのプロパティとデータのプロパティをコロンで区切って定義します。例えば、<div data-win-bind="textContent:info">は、HTMLのdiv要素のtextContentプロパティの値を、JavaScriptで定義したデータのinfoの値に紐づけるという意味になります。

情報を表示する場所を決める

 次に、情報を表示したい場所にListViewコントロールを配置します。default.htmlを開き、main-left要素の中を次のように修正します。ここでは、id属性が「travel-list」であるListViewコントロールを配置します。

ListViewコントロールの表示エリア(default.htmlの抜粋)
<div id="main-left">
   <!-- 1. 旅行先情報の表示方法(テンプレート)を指定する -->
   ~中略~
   <!-- 2. 旅行先情報の表示 -->
      <div id="travel-list" data-win-control="WinJS.UI.ListView"
          data-win-options="{ itemTemplate:select('#travelTemplate') }">
      </div>
</div>

 ListViewコントロールを配置するには、data-win-control属性を「WinJS.UI.ListView」に設定します。また、配置したListViewコントロールのデータの表示方法は、data-win-options属性を設定します。先ほど定義した「travelTemplate」をもとにして体裁を決めるには、data-win-options属性を、data-win-options="{ itemTemplate:select('#travelTemplate') }"のように指定します。これは、ListViewコントロールで表示するデータ項目の表示テンプレートに「travelTemplate」を選ぶという意味になります。

 このtravel-list要素に、スタイルを設定するためdefault.cssに以下を追加します。

旅行先情報のスタイル定義(default.cssの抜粋)
div#travel-list {
    width: 100%;
    height:100%;
    float: left;
}

データを表示しよう

 旅行カタログに表示するデータの用意ができたので、アプリに表示するためのプログラミングを行います。

 それでは、作成したtraveldata.jsにデータバインディングを行うためのプログラムを追加します。

データバインディング(traveldata.js)
(function () {
    "use strict";

    // 旅行データの登録(ヨーロッパ)
    ~ 中略~
    // 旅行データの登録(ビーチリゾート)
    ~ 中略~

    // 1.データバインディングの設定
    var dataEU = new WinJS.Binding.List(dataArrayEU);
    var dataBeach = new WinJS.Binding.List(dataArrayBeach);
    
    // 2.画面からデータを参照できるようにする設定
    WinJS.Namespace.define("TravelData", { EU: dataEU, Beach: dataBeach });
})();

 追加したプログラムの説明は次のとおりです。

1.データバインディング

 作成したヨーロッパとビーチリゾートのデータを、それぞれ変数dataEUと変数dataBeachにデータバインドします。このときに使うWinJS.Binding.Listオブジェクトは、JavaScriptのデータをHTML画面で利用するためのデータのありかを示すもので、データソースと呼ばれています。

2.データ参照の設定

 作成したデータは、他のプログラムから一切アクセスすることができないように保護されています。そのため、HTML画面からデータを参照するために、「名前空間」を作成します。

 アプリケーションの中で変数やメソッドで名前が同じものを使ってしまった場合、プログラムは正しく動作しません。これを名前の衝突と言います。

 そこでこの名前の衝突を避けるために「名前空間」を設定します。

 例えば、花子さんという名前の人が2人いたとすると、それぞれを区別するために「野村」さん「三井」さんという苗字をつけて名前を呼ぶと、2人の名前をが競合することはありません。

 名前空間を設定するには、WinJS.Namespace.defineメソッドを使います。defineメソッドは、WinJS.Namespace.define( 名前空間 , { 名前 : 値 , 名前 : 値 });のように指定します。

 サンプルの例では、「TravelData」という名前空間に、EUとBeachという2つの名前を定義し、それぞれの値に1.でデータバインディングを行ったdataEUとdataBeachの値を設定しています。

次のページ
(応用)チャレンジしてみよう

この記事は参考になりましたか?

作って学ぶ! 新人研修/Windowsストアアプリで電子カタログを作ろう連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 阿佐 志保(アサ シホ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7451 2013/10/31 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー