TOPシステム開発> Ajaxからの登録(/ajax_regist)
まるごとPerl!
使ってわかるCatalyst

第7回:Ajaxで登録フォーム
著者:アドウェイズ  加藤 敦   2006/9/25
1   2  3  次のページ
Ajaxからの登録(/ajax_regist)

   今回のAjaxは、テキストボックスに値を入れて、フォーカスが外れたら登録するというものにしました(リスト24)。Ajaxからはajax_registが呼び出されますが、ajax_registは登録処理を行うだけなので、regist_executeにforwardします。また、このAjaxの場合はdivブロックを入れ換えるだけなので、bookmark_list.tt(リスト25)という、ブックマーク一覧部分だけを表示するテンプレートを指定しています。
リスト24:Ajaxからの登録
sub ajax_regist : Local{
   my($self, $c) = @_;
   $c->forward('regist_execute');
   $c->stash->{template} = 'bookmark_list.tt';
}

リスト25:bookmark_list.tt(ブックマークの一覧部分)
bookmark_list.tt(ブックマークの一覧部分)
(画像をクリックすると別ウィンドウに拡大図を表示します)

   Ajaxでdivブロックを入れ換える処理を行う場合、その部分だけのテンプレートを作り、そのテンプレートは全体のテンプレートからインクルードするようにすると簡単です。

   また今回はPlugin::Prototypeを使用してAjax部分を作成しています。header.tt(リスト26)の「c.prototype」から始まっている部分がその機能になり、テキストボックスが更新されると、ajax_regist/をリクエストして、bookmarkというidのdivブロックを変更しています。

リスト26:header.tt(フォーム入力部分)
header.tt(フォーム入力部分)
(画像をクリックすると別ウィンドウに拡大図を表示します)


削除の実行(/delete_execute)

   findでDBIx::Class::ResultSetオブジェクトを取得し、deleteメソッドを使うだけです(リスト27)。見つからなければ、エラーメッセージを表示します。

リスト27:削除の処理
sub delete_execute : Local {
   my($self, $c) = @_;
   if(my $r = $c->model('DBIC::bookmark')
         ->find({bookmark_id => $c->req->param('bookmark_id')})){
      $r->delete();
   }else{
      $c->stash->{msg} = 'delete error - not found -';
   }
   $c->forward('index');
}


1   2  3  次のページ

株式会社アドウェイズ 加藤 敦
著者プロフィール
株式会社アドウェイズ   加藤 敦
アフィリエイトシステムやモバイルサイトの構築などを経て、現在、技術マネージャーとして新規サービスの設計、システムの標準化などに携わる。個人的にCPANモジュールの開発や、オープンソースのプロジェクトに参加している。


INDEX
第7回:Ajaxで登録フォーム
Ajaxからの登録(/ajax_regist)
  その他のアクション
  プラグインの作り方