EdgeRailsでRJS Template
RJS Templateなわけです。ヽ( ・∀・)ノくまくまーさんのページで発見して、さっそく試してみました。
RJT Templateを使うと、Controllerの方でjavascriptをしこしこと生成して、viewのほうでそれをevalに食わせるとかかなりめんどくさいことをしなくてもよくなります。
めんどくさい例:
[]def [][]search_isbn[] text_for_render = "" tags = "" []@amazon[] = MyAmazon.new([]@params[][[]:isbn[]]) product = []@amazon[].getProductName() []if[] product == []nil[] []then[] text_for_render += []@params[][[]:isbn[]] + " is []not[] available." []else[] tags += image_tag([]@amazon[].getMediumImage) + "<[]br[]>\n" tags += start_form_tag([]:action[] => "[]add[]") tags += "ProductName:" + text_field_tag("productname", product) tags += "<[]br[]>BestPriceForSell:" + text_field_tag("bestprice", []@amazon[].getBestPrice) tags += submit_tag("Submit") tags += end_form_tag tags = javascript_tag(update_element_function("recordform", []:content[] => tags)) []end[] text_for_render += isbn_form([]@params[][[]:isbn[]]) render_text text_for_render + tags []end[]
RJS Templateを使う場合は、適当なテンプレートにlink_to_remote 'foo', :url => {:action=>'bar'}とした場合、同じフォルダに'bar.rjs'というファイルを作り、その中にDOMを操作するコードを書けば終了。コントローラーにアクションを書く必要がなくなります。なんか、スマートに書けた気がしていい気分です。ただ、くまくまーさんのところでも言及されているように、viewの部分に当たるのかどうかは微妙なところ。。