40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

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();

実行したらこんな感じで表示されるようになりましたー
result

次回書きたい内容

  • Titanium Mobileから利用するsqliteのファイルっていったい何処に出来上がるのか?
  • ブログ本文を取得するクローラーの設計に関して