« スヌーカー初プレイ | メイン | 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