カスタムタグ(のようなもの)

Java-JSPでは「カスタムタグ」と呼ばれる独自のタグを定義することでビュー中のコンポーネントJavaで実装することができた。

<%@ taglib uri="/WEB-INF/hogeb.tld" prefix="hoge" %>

これと同じことをRailsで実現しようとする場合、どのような方法が良いのだろうといろいろ調べたのだが、そんな難しく考えることではなかったようだ。

単にビューのヘルパーをビューから呼び出すだけで良いらしい。
Railsのビューヘルパー - [ThinkIT] 第3回:JSFとRailsで比較(後編) (2-3)

であれば、JSPでガシガシと書いていたカスタムタグだってJSPのスクリプトレットで、コンテキスト中のメソッドを呼び出すだけで良かった訳だが、どうしてその当時にそうはならなかったのだろうなあ。(ASPと初期のJSPのスクリプトレットを嫌悪する空気がそうさせた?)

あと、少し違うがカスタムタグとして実装することもあった、例えばWindowをオープンするスクリプト(javascript)を出力制御するようなタグ 'window_open_script'を作る場合、Railsならば

  • 同様にビューヘルパーを使う
  def window_open_script( options = {}, function_name = "window_open")
    javascript_tag do 
      page = "function " + function_name + "(url, name, width, height)"
      page << "{\n"
      page << "   if (!lock()) return false;\n"
      〜略
    end
  end
  • ビュー中に直接記述する
<%= javascript_tag <<-END
    function windowOpen(url, name,  width, height) {
        if (!lock()) return false;
    〜略
  END
%>

両方法とも部分テンプレートとして組込むこともできる。

などがあるが、どれがベストなんだろうな。いろいろ書けてしまうってのも悩ましい。