JavaScriptでHTMLのDOM(Document Object Model)を操作するコードを書くのは面倒だ。さまざまなUIをゼロから作っていくのも大変だ。そんなときは、Webアプリ用のライブラリを探してみよう。便利なライブラリがたくさん見つかるだろう。
今回は、jQueryとjQuery UIを使ってみる。また、その後でIonicというフレームワークも簡単に紹介する。
jQueryは、主にDOMの操作を簡単にしてくれるライブラリだ。最近のASP.NETでも使われているなど、採用実績は多い。JavaScriptの開発に疎い筆者でさえも数年前から常用していて、DOM操作のコードをjQueryなしで書く方法を忘れてしまいそうになるほどだ。
jQuery UIは、インタラクティブなWebページの開発に役立つライブラリで、jQueryを拡張するものだ。
jQuery/jQuery UIは、日本にもその利用者が多いからだと思うが、日本語の情報がかなり豊富なのもありがたい。少し古いものだが関連する記事を挙げておこう。
この2つのライブラリはNuGetから導入する。依存関係があるので、jQuery UIを導入するとjQueryも一緒にインストールされる。
ソリューションエクスプローラーでプロジェクトを右クリックし、表示されたメニューから[NuGet パッケージの管理]を選ぶ。すると[NuGet パッケージ マネージャー]の画面になるので、「jQuery.UI.Combined」を見つけ出してインストールする(次の画像)。
NuGetから導入したJavaScriptのライブラリは、プロジェクト直下のScriptsフォルダに配置される。しかし、アプリからそのフォルダにはアクセスできない(アクセスできるのはwwwフォルダ配下のみ)。そこで、wwwフォルダの下にlibフォルダを作り、Scriptsフォルダにあるファイルを手動でコピーする(次の画像)。また、jQuery UIが使うcssファイルがプロジェクト直下のContent\themes\baseフォルダの下に入っているので、同様にwww\lib\cssフォルダにコピーしておく(その下のimagesフォルダも含めて)。
NuGetから導入したライブラリのファイルをいちいち手動でコピーするのは面倒だ。その作業を、ビルド時のhook(フック)として自動化することも可能である。
詳細は「Add packages to your Cordova project with the Nuget Package Manager」をご覧いただきたい。簡単に説明すると、次のようだ。
まず、プロジェクト直下にhookフォルダを作り、次のようなcopyNuGetFiles.jsファイルを置く。
var path = require('path');
module.exports = function (context) {
var shell = context.requireCordovaModule('shelljs');
var src = path.join(context.opts.projectRoot, 'Scripts/*');
var dest = path.join(context.opts.projectRoot, 'www/lib');
shell.cp('-fr', src, dest);
var cssSrc = path.join(context.opts.projectRoot, 'Content/themes/base/*');
var cssDest = path.join(context.opts.projectRoot, 'www/lib/css');
shell.cp('-fr', cssSrc, cssDest);
};
次に、プロジェクト直下にあるconfig.xmlをXMLエディタで開き(ソリューションエクスプローラーで選択して[F7]キー)、末尾の</widget>タグの上に次の1行を追加する。
<hook type="before_prepare" src="hooks/copyNuGetFiles.js" />
これで、ビルドするたびに、自動的にコピーされるようになる。
JavaScriptのライブラリをindex.jsファイル内から利用するには、index.htmlファイルに<script>要素を使ってJavaScriptファイルへの参照を追加する。jQuery/jQuery UIを使うには、次のコードのように書き換える。
……省略……
</div>
<!-- jQuery/jQuery UIを利用する -->
<script type="text/javascript" src="lib/jquery-1.6.4.js"></script>
<script type="text/javascript" src="lib/jquery-ui-1.11.4.js"></script>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="scripts/platformOverrides.js"></script>
<script type="text/javascript" src="scripts/index.js"></script>
</body>
</html>
時刻を表示する部分は、今は次のコードのようになっている。
var element = document.getElementById("deviceready");
……省略……
element.innerHTML = hh + ":" + mm + ":" + ss;
これがjQueryを使うと、次のコードのようにシンプルに書ける。
// var element = document.getElementById("deviceready");
……省略……
//element.innerHTML = hh + ":" + mm + ":" + ss;
$('#deviceready').text(hh + ":" + mm + ":" + ss);
次に2つの時計画像を切り替えたり、ダイアログを表示したりしてみよう。もちろん、これらにもjQueryを使用する。
Copyright© Digital Advantage Corp. All Rights Reserved.