CoffeeScriptの最近のブログ記事

テーブルの行を長押しして、その行に対する特別な処理を行いたくてTableViewのlongpressイベントを使おうとしました。

プログラムはCoffeeScriptで書いてますので自分で試す場合はJavaScriptに変換して下さい。

出力結果:

[DEBUG] longpress> undefined undefined

行の情報が渡ってこねー(-ω-)

そこで何が呼ばれてるのかtouch系のイベントを並べて見てみると、

出力結果:

[DEBUG] touchstart> 1 TITLE-2
[DEBUG] longpress> undefined undefined
[DEBUG] touchend> 1 TITLE-2
[DEBUG] click> 1 TITLE-2

touchstartでindexやrowを覚えて、longpressが起こったときに使えれば良さそうです。 覚えた情報はtouchendで初期化するとよさげ。

ところがよく見ると余計なことにclickも呼ばれている(-ω-)

longpressのでclickイベントの発火を抑えるいい方法が見つからず、結局longpressの処理内でフラグを立てclick処理で判断するというコードに落ち着きました。

あまりカッコよくはないですね。Titanium側でlongpressが検知されたらclickは呼ばない仕様にしてもらえたほうが自然な気がします。

ひょとしたらclickが呼ばれないと何かできなくなる操作があるのかなぁ。

Titanium.DatabaseはローカルなSQLiteを使ってデータを保管できる非常に簡単なAPIですが、SQLを直に書かないといけないのが些か面倒です。

かと言ってORM的な仕組みを構築するというのもオーバー過ぎる事が多いです。

保存するデータがHash形式のObjectに格納されているとしてCoffeeScriptであれば、こんな感じでUPDATE文を簡単に実装することができます。

例えばデータとして次の様なオブジェクトが存在した場合

まずは、SET句を作ります。

続いて仮パラメータにセットする値の配列を作ります。
UPDATE文なのでWHERE句にプライマリキー(id)を指定するため、最後にid項目も追加します。

あとは連結してUPDATE文に仕立て上げるだけです。

文字列連結だけで生成するよりも気持ちいいですね!

Titaniumを使うときCoffeeScriptで書いているのですが便利ですね。

しかしRubyでこう書いてたのは、CoffeeScriptではどう書くの?(・ω・)って事が多いです。

さっきひとつ新しい発見があったので書いておきます。

外部サービスのAPIとかをたたくときクエリーパラメータをHashにためておいて下記の様にURLパラメータを作成しますよね?

CoffeeScriptだと同じように書く方法が分からなくて普通にループして配列に突っ込んで作ってました。

ここは包括?(Comprehensions)を使えば良いのですね!

とてもイイ!

このアーカイブについて

このページには、過去に書かれたブログ記事のうちCoffeeScriptカテゴリに属しているものが含まれています。

前のカテゴリはCoffeeです。

次のカテゴリはconstraint-programmingです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。