Creating a Flex application using the TurboGears frameworkを参考に。
JSONでやり取りしてるからflex2の部分はそのままでフレームワーク部分を変えるだけでいい。MVCフレームワークに小さいMVCフレームワークが乗っているという風にも取れるけど、かなり疎なので、自前でwebapiサービスを提供しつつ、サービスを受けるっていう感覚に近いかもしれん。
イメージにするとこんな感じ。
ファイルはココに置いておいた。
CatalystのviewはJSON。で、Flex2は受けとったJSONをmodelにしてASでロジック書いて、MXMLでUIのデザインをやればいい。
そのためすっきりとした感じはする。後は、チュートリアルみてたらFlex Builder2が欲しくなった。UIデザインするにはGUIのツールがやっぱ楽でいいと思う。
flex2に関してはCreating a Flex application using the TurboGears frameworkのオンラインチュートリアルを眺めてください。corelibを使うとJSONのシリアライズ/デシリアライズをやってくれるので必要。c:flex2extlibというフォルダをつくって放り込んでおいた。
コンパイルは
mxmlc -compiler.include-libraries c:\flex2\extlib\corelib.swc \
-- address.mxml
とやるとswfができるので、catalystプロジェクトの root/staticに放り込む。
flex2はこれで終了。続いて、というかメインのCatalystをいじるわけだけど、こっちも大して面倒なところはない。
TGはhttp://localhost:3000/からアドレスリストをJSONで受け取って(R)、http://localhost:3000/save,http://localhost:3000/deleteでそれぞれCU,Dという実装だったので、Catalystもこれに併せて、Catalyst::View::JSONとDBIC::Schema::Loaderを使ってつくることにした。
まず
でプロジェクトをつくって
script\myapp_create.pl view JSON JSON
でJSON用のviewを作成。モデルはSQLiteで。
まずSQLite
sqlite3 myapp.db < myapp.sql
ちなみにsqlはこれ。
CREATE TABLE address (
id INTEGER PRIMARY KEY,
full_name TEXT,
phone TEXT
);
続いて、DBIC::Schema::Loader
いつも、明示的に書いてるので、触るのはほとんど初めてなんだけど、スキーマクラスって自分で書かないといけないんだろうか?
こんなの。
use strict;
use base qw/DBIx::Class::Schema::Loader/
__PACKAGE__->loader_options
(
relationships => 1
);
ヘルパーあんのかな?あとで調べる。こういう細かい部分はTGのSQLObjectはあんま考えないでいいので楽。データもcatwalkからブラウザでちょこちょこ入れられるし。
Root.pm,save.pm,delete.pm
Root.pmはアクセスするとアドレスリストのJSONを返す。
sub default : Private {
my ( $self, $c ) = @_;
my @result = $c->model('DBIC::Address')->search();
$c->stash->{addresses} =
[
map {{fullName => $_->full_name, phone => $_->phone, id => $_->id}} @result
];
$c->forward('MyApp::View::JSON');
}
save,deleteは普通にDBIC操作なので省略。
やるべきことをやったら動かしてみる。、
こんな感じでflashが、、、なんかきもちいい。
あと今回手を動かしていく過程で以下の本がマイウィッシュリストに投入された。
この時期頻発する送別会を2,3見送ればこの中の2冊は確実にゲットできるのになぁとちょこっと思ったヨ。っていうかかなり本気で悩む。
とりあえずTurboGearsの本は欲しいなぁ。買いかなぁ、見送りかなぁ?もし読んだヒトがいたらアドバイスなどください。