« スヌーカー初プレイ | メイン | J2EE勉強会 »
2005年05月12日 (木)
AmritaHandler(仮) 20050512版 [テクニカル]
Amrita2が1.9.3から1.9.4にバージョンアップしてだいぶいろいろ変わっているので、対応できるように修正。前回からの変更点は…
- HTML select/optionを実装
 テンプレートに書いたoption項目をそのまま生かす静的select、モデルから項目を生成する動的selectの両方を実装。ただしmultiple selectには未対応。
- HTML input type="radio"を実装
 上に同じく静的radio、動的radioの両方を実装。
- ATTRアノテーション詳細化
 アクション用アノテーション ATTR_ACTION_TEXTBOX, ATTR_ACTION_CHECKBOX, ATTR_ACTION_SELECT, ATTR_ACTION_SELECT_DYNAMIC, ATTR_ACTION_RADIO, ATTR_ACTION_RADIO_DYNAMIC を新設。ページ用アノテーション ATTR_TEXTBOX, ATTR_CHECKBOX だけ作成。他も作る予定。
amritahandler_20050512.zip download
動作にはAmrita2 1.9.4とNeedle 1.2.0が必須。
基本の構想はだいぶ形になってきた気がする。今後は機能を追加しつつ、最大勢力のRuby on Railsに摺り寄っていこうかと考え中。
以下適当な説明。
サンプルのlist.htmlは、マスターメンテ系を意識していろいろ詰め込んでみました。もちろんそのままブラウザで確認できます。対応するモデルオブジェクトのlist.rbはこんな感じ。
class List
  attr_reader :items
  def initialize
    item1 = ListItem.new
    item1.input = 'foo'
    item1.options = [ {:text=>'hoge1', :value=>'hoge1'},
                      {:text=>'hoge2', :value=>'hoge2'} ]
    item2 = ListItem.new
    item2.input = 'bar'
    item2.options = [ MenuOption.new('hoge3'), MenuOption.new('hoge4') ]
    @items = [item1, item2]
  end
end
class MenuOption
  attr_reader :text, :value
  def initialize(value)
    @text = value
    @value = value
  end
end
class ListItem
  attr_accessor :delete, :input, :select1, :select2, :radio1, :radio2
  attr_writer :options
  *ATTR_ACTION_CHECKBOX = :delete
  *ATTR_ACTION_TEXTBOX = :input
  *ATTR_ACTION_SELECT = :select1
  *ATTR_ACTION_SELECT_DYNAMIC = { :name=>:select2, :item_id=>:select2option, :items=>:options }
                        # :text=>:text, :value=>:value はオプション
  *ATTR_ACTION_RADIO = :radio1
  *ATTR_ACTION_RADIO_DYNAMIC = { :name=>:radio2, :item_id=>:radio2input, :items=>:options }
  def initialize
    @delete = false
    @input = ''
    @select1 = '2'
    @select2 = ''
    @options = []
    @radio1 = 'B'
    @radio2 = ''
  end
end
定数アノテーションがかなり増えました。意味は名前でなんとなくわかってもらえると思います。 ATTR_ACTION_SELECTとATTR_ACTION_SELECT_DYNAMICの違いですが、前者の場合list.htmlにoption要素がすべて書いてあって、それをそのまま表示します。後者の場合はhtmlにはテンプレートとなるoptionが1つだけ書いてあり、アノテーションの:itemsに指定された名前のプロパティからoption項目を動的に生成します。データはHashと独自クラスのどちらも使えます。
ロジックはActionクラス(listaction.rb)に書きますが、マスターメンテ系なのでロジックはあまりありません。データベース連携などの機能はまだありませんが、Actionクラスに少し書き足すだけで簡単にできるでしょう。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/56
