続・mapleとjavascript
id:bobchinさんの所を見ていて思いついたんだけど,確かにAjax使うと非javascriptな人たちは困るですね.
データを返す部分に関してはとりあえずactionで返したい変数なり配列なりオブジェクトなりを用意する.ここまでは恐らくAjaxを使おうが使うまいが一緒のはず.で、自分の独自拡張として(パクリだけど),
Filter_Viewで
if (method_exists($action, 'valiables')) { if (is_array($action->valiables())) { $renderer->setValiables($action->valiables()); } } if (method_exists($action, 'renderObjects')) { if (is_array($action->renderObjects())) { $renderer->setObjects($action->renderObjects()); } }
Smarty4Mapleで,
function setObjects(&$objects) { foreach ($objects as $key => $value) { if (is_object($value)) { $this->register_object($key, $value); } } } function setValiables(&$valiables) { foreach ($valiables as $key => $value) { $this->assign($key, $value); } }
としているので,テンプレート内で使う変数を配列としてactionのvaliablesメソッドに一気に詰め込んでいます.
これを利用してもう一個Ajaxとかなんとかメソッドを作って,そこからの返り値をJSON変換して返すといいような気がしたりしなかったり.(Filter_ViewじゃなくてFilter_AjaxView発動とか)
でも,結局どこかで処理をスイッチさせないといけなくてコアに手を入れることにはなりそうだなぁ.
トリガーとしては,javascriptからの通信で&json=onってパラメータを一緒に渡してあげるとか.そしたら通常viewじゃなくて,JSON形式のデータを表示すると.
できれば
webapp/foo/bar/Hoge.ajax.php
って形式は敬遠したいところ.