2011年8月24日水曜日

今更ですがTitanium MobileでCoffeeScriptしてみた(2)


Titanium Studio で CoffeeScriptが使えるようになったので、次はちょっとフレームワークっぽい物を作ってみたくなりました。

目標:TweetaniumをCoffeeScriptで置き換える

とりあえず...
  • 名前空間をサポート
  • ソースを分割して書ける
で、こんな感じになりました。名前はsyrup。

syrup.coffee

define_global_variable_js = (name) ->
  js = "if(typeof #{name} === 'undefined') \{ #{name}={} \} else \{ #{name} \}"
  return `eval(js)`

exports.namespace = (ns, block) ->
  names = ns.split '.'  

  # root namespace is assigned to global variable 
  target = define_global_variable_js names[0]
  
  for name in names.slice 1
    target[name] = {} if not target[name]
    target = target[name]     
  
  block target

exports.use = (ns) ->
  this.namespace ns, (exports) -> return exports
    
exports.include = (file) ->
  Ti.include("#{file}.js")

model/entity.coffee

syrup.namespace 'MYAPP.Model', (exports) ->
  class Entity
    sayHello: (name) ->
      alert "Hello,I'm #{name}"
      
  exports.Entity = Entity

model/person.coffee

syrup.namespace 'MYAPP.Model', (exports)->
  Entity = syrup.use 'MYAPP.Model.Entity'
  
  class Person extends Entity
    constructor: (@name) ->
    
    sayHello: ->
      super @name

  exports.Person = Person      

app.coffee

syrup = require 'syrup'

syrup.include '/model/entity'  
syrup.include '/model/person'
    
person = new MYAPP.Model.Person 'Coffee syrup'
person.sayHello()

あまり、意味のないサンプルコードで申し訳ないです...

プラグインを弄って、依存関係を手繰ってソースファイルをソートして、app.coffeeを自動で生成すれば、もっと楽になるかな? あとは、どうやってbootするかだな。

今更ですがTitanium MobileでCoffeeScriptしてみた(1)


なんだか巷では、CoffeeScriptいいね!ってことになってるようで、私もちょっと乗っかってみようと思い試してみました。

まずは、Titanium Studio上でCoffeeScriptを使えるようにするための環境作り。

Titanium CoffeeScript Pluginを入れてみます。
Mac OSX Lion / Titanium Studio 1.0.4 でしか確認していません。

  • 事前にnodeとかcoffeescriptをインストールしておいて下さい。
    また、上記サイトにも書いてますが、Titanium Studio上ではパスが通ってないので、
    $ sudo ln -s /usr/local/bin/node /usr/bin/node
    $ sudo ln -s /usr/local/bin/coffee /usr/bin/coffee
    
    などして、Titanium StudioからCoffeeScriptを実行可能にしてあげておく必要があります。

  • plugin.py を /Library/Application Support/Titanium/ti_coffee_plugin/1.0/にコピーします。

  • 適当にプロジェクトを作成します。
  • app.jsは必要ないので削除します。
  • tiapp.xml に 以下の記述を追加します。
    <ti:app>
        .
        .
        .
        <plugins>
            <plugin version="1.0">ti_coffee_plugin></plugin>
        </plugins>
    </ti:app>
    
  • app.coffeeを追加します。
これで、Titanium Studioでビルド時に、プラグインがapp.coffeeをapp.jsに変換するようになります。

CoffeeScript Pluginのプロジェクトテンプレートあったら楽だなあ...