yamazのRails日記 このページをアンテナに追加 RSSフィード

2007-02-20RailsでCoolなDatePickerを使いたい このエントリーを含むブックマーク

RailsでDatePicker(カレンダー形式で日付を指定する方法)と言えば

http://projects.exactlyoneturtle.com/date_picker/

ですが,リンク編集する形式になっててFORMを直接編集できない&

いろんな決めうちが多いのが少々不満だったところ,

ShachiさんからナイスなCalendarを教えてもらった.


The DHTML / JavaScript Calendar

http://www.dynarch.com/projects/calendar/

デモ:

http://www.dynarch.com/demos/jscalendar/

で,ついでなので簡単なヘルパを作ってみた.


  def date_picker_field(object, method, options = {})
    html_options = {:size => 12}.merge(options[:html] || {})
    auto_index = nil
    if  object.sub!(/\[\]$/,"")
      obj = instance_eval("@#{Regexp.last_match.pre_match}")
      auto_index = obj.id
    else
      obj = instance_eval("@#{object}")
    end

    id_with_index = (auto_index)? "#{object}_#{auto_index}_#{method}" : "#{object}_#{method}"

    calendar_options = {:ifFormat => "%Y-%m-%d",
                        :inputField =>  "#{id_with_index}",
                        :button => "#{id_with_index}"}.merge(options[:calendar] || {})

    out = text_field(object,method, html_options)
    out << javascript_tag(sprintf(%Q!Calendar.setup({%s});!,
                                  calendar_options.map {|k, v| "#{k}:\"#{v}\""}.sort.join(', ')))

    if obj.respond_to?(:errors) and obj.errors.on(method) then
      ActionView::Base.field_error_proc.call(out, nil)
    else
      out
    end
  end


これでRAILSROOT/public/javascripts/,RAILSROOT/public/stylesheets/にそれぞれJSファイルCSSファイルを配置して,

  <%= stylesheet_link_tag "calendar-win2k-1.css" %>
  <%= javascript_include_tag "calendar.js" %>
  <%= javascript_include_tag "lang/calendar-en.js" %>
  <%= javascript_include_tag "calendar-setup.js" %>
  date_picker_field('order','start_on',{:html => {}, :calendar => {}})
  

@orderのstart_onに対してそれっぽいことをしてくれます.

悩みどころ

inputタグオプションは:htmlオプションでなんとかなったけど,caldendarの初期化に関して

http://www.dynarch.com/demos/jscalendar/doc/html/reference.html#node_sec_2.3

にあるようにJavaScriptのfunction型やArray型をうまくRubyHashから生成する方法がない...

to_jsonという手を教えてもらったけどfunction型やDate型には対応してない.どうしたモノか.


yamaz的日常

Rails勉強会@東京第15回

に出席.用事で後半のみの出席だったけど,いろいろ話せておもしろかった.いつもいつもですが,ドリコムさん場所の提供ありがとうございます.

RailsにおけるFeedとCashe

沢田さんによるRailsにおけるRSSフィードの説明.

とか.


あわせて読みたい

mongrel FAQ

Q: Is it multi-threaded or can it handle concurrent requests?

のあたり.


Mongrelをいくつ立ち上げるべきか

s-takeis-takei2007/06/12 17:27初めまして。武居です。
dhtml_calendarプラグイン関連の情報を探していたら
たどり着きました。
上記のdate_picker_fieldのコードですが、auto indexを使用した場合、
4行目 if object.sub!(/\[\]$/,"")
としているので、objectが変更されて '[]'が削除されるので、
17行目 out = text_field(object,method, html_options)
では、'[]'が削除されたオブジェクト名が渡り、正常に動作しない
のではないでしょうか?

トラックバック - http://rubyist.g.hatena.ne.jp/yamaz/20070220