015-Titanium Mobileでお手軽に使えそうなORMのjoli.js
ここ最近ずっとJazzRecordを検証してきたのですが前回書いたように'this.result' [null] is not an object. at jazz_record.jsのエラーではまっていたのと、このエラーの原因探る中でたまたまjoli.jsを見つけたのでこちらを試してみることにしました。
joli.jsとは?
上記githubの解説にも書かれているように、JazzRecordをベースにしてTitanium Mobile用に作られたORMのようです。
ソースを見ると全部で600行強とたいしたボリュームでなく、privateな感じのメソッドも見るかぎり
- each
- extend
- getType
- jsonParse
- merge
- setOptions
- toQueryString
- typeValue
という感じでメソッド名を見ればなんとなく処理が理解できそうなものになっているので思うような動作しなかった場合にソースを追い易いかなと思います。
joli.js使ってみた
まずはgithubからファイルをダウンロードして、joli.jsを自分のプロジェクトのResourcesフォルダ配下にコピーします。
joli.js使ってmodelを作成するファイル(orm.js)と、それを呼び出すapp.jsを下記のようにしました。
joli.connection = new joli.Connection('orm4blogDB'); var blog_entry = new joli.model({ table: 'blog_entry', columns: { id:'INTEGER', entry_url:'TEXT', entry_body:'TEXT' } }); joli.models.initialize();
// app.js Titanium.UI.setBackgroundColor('#000'); Titanium.include('joli.js'); Titanium.include('orm.js'); // create tab group var tabGroup = Titanium.UI.createTabGroup(); // Unit Test var unit = Titanium.UI.createWindow({ url: 'runner.js', title:'Unit Test' }); var tabUnitTest = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Unit Test', window:unit }); tabGroup.addTab(tabUnitTest); // orm var orm_win = Titanium.UI.createWindow({ }); var orm_tab = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'ORM', window:orm_win }); var orm_View = Titanium.UI.createWebView({ borderRadius: 5, borderWidth : 1 }); var yokota1 = new joli.record(blog_entry); yokota1.fromArray( { id: 1, entry_url:'http://blog.pasonatech.co.jp/yokota/199/14992.html', entry_body:'〜長いので省略〜' }); yokota1.save(); var yokota2 = new joli.record(blog_entry); yokota2.fromArray( { id: 2, entry_url:'http://blog.pasonatech.co.jp/yokota/101/14977.html', entry_body:'〜長いので省略〜' }); var html_contents = "<h1>URL</h1>" + yokota1.entry_url + "<br />" + "<h2>本文</h2>" + yokota1.entry_body + "<br />" + "<h1>URL</h1>" + yokota2.entry_url + "<br />" + "<h2>本文</h2>" + yokota2.entry_body + "<br />"; orm_View.html =html_contents; orm_win.add(orm_View); tabGroup.addTab(orm_tab); // open tab group tabGroup.open();