読者です 読者をやめる 読者になる 読者になる

TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

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のファイルっていったい何処に出来上がるのか?
  • ブログ本文を取得するクローラーの設計に関して