2012-10-03 43 views
2

我有一个rails应用程序,带有“simpleform”和“bootstrap-datepicker-rails”gems。扩展导轨simpleform功能

我尽量让这样的视图代码更易读:

f.input :birthday, :mydatefield, :options => {:icon => "calendar", :data-date => "21.12.2012", :data-format => "dd-mm-yyyy"} 

此时此刻我这样写:

<div class="input-append date" id="user_birthday" data-date="12-02-2012" data-date-format="dd-mm-yyyy"> 
    <%= f.input_field :birthday, :disabled => true %> 
    <span class="add-on"> 
     <i class="icon-calendar"></i> 
    </span> 
</div> 

或本

<%= f.input :birthday, :wrapper => :datepicker, :wrapper_html=> {id: "user-birthday", class: "date"} do %> 
    <%= f.input_field :birthday, :disabled => true %> 
    <%= content_tag :span, :class => "add-on" do %> 
     <%= content_tag :i, :style => "color:grey", :class => "icon-calendar" do 
     end %> 
    <% end %> 
<% end %> 

让我的结果:

Simpleform with bootstrap icon and datepicker

的上述两个正在这个结果,效果很好:当我尝试解析变量包装

:wrapper_html=> => {:data-date => "21-12-2012"} 

它抛出错误

<div class="control-group string required date" id="user-birthday"> 
    <label class="string required control-label" for="user_birthday"><abbr title="required">*</abbr> Birthday</label> 
    <div class="controls"> 
     <div class="input-append"> 
      <input class="string required disabled" disabled="disabled" id="user_birthday" name="user[birthday]" size="50" type="text" /> 
      <span class="add-on"> 
       <i class="icon-calendar" style="color:grey"></i> 
      </span> 
     </div> 
    </div> 
</div> 

...

我必须做什么?我在扩展宝石方面很新颖。

我必须写信才能使其正常工作?

  • SimpleForm Wrapper?
  • app/inputs/datepickerInput.rb?
  • initializer/datepicker.rb?
  • 帮手法?

一个例子将非常有帮助!

非常感谢提前!

+1

:wrapper_html => => {:data-date =>“21-12-2012”} 你确定在这行描述中?因为它有语法错误。它应该看起来像:wrapper_html => {:data-date =>“21-12-2012”} –

+0

抱歉,错字。只在这里在stackoverflow。在我的代码中是正确的。 主要问题是属性中的“ - ”。 因此,当我尝试:data-blah =>“xxx”时,“data-date-format”或“data-blah-blah”引发异常 当我尝试:test =>“xxx”时,似乎正在工作 – Jan

+0

这些属性可以用引号传入,'data-blah'=>'value' –

回答

0

我已经切换回导轨实施形式。对我来说(作为初学者)simple_form似乎还不够清楚。

对于我的解决方案上面我创建了一个FormBuilder:

class BootstrapFormBuilder < ActionView::Helpers::FormBuilder 

    def birthday_field_with_hint_and_icons (name, *args) 
    options = args.extract_options! 
    birthday_field_icons(name) + hint(options[:hint]) 
    end 

    def birthday_field_icons(name, *args) 
    dd = 'data-date' 
    ddf = 'data-date-format' 
    content_tag :div, class: "input-append date", dd => 18.years.ago.strftime("%d-%m-%Y"), ddf => "dd-mm-yyyy", id: "user_birthday" do 
     text_field(name, :disabled => 'disabled') + icon("icon-calendar") 
    end 
    end 

    private 

    def icon(icon) 
    content_tag :span, class: "add-on" do 
     content_tag :i, style: "color: grey;", class: icon do 
     end 
    end 
    end 

    def hint(hint) 
    content_tag :span, class: "help-block" do 
     hint 
    end 
    end 
end 

感谢您的帮助!

1

您可以创建自定义字段。按照this tutorial来做到这一点。

+0

为了我的理解,这个啧啧有点多余。它有效,但不完整。我做了一个字符串变量,如'options =“data-date-format”',我稍后在代码中使用它,而不是直接写入,但我的方法是使用包装器(包装器和变量的组合) 也许部分也会做那个东西吗? – Jan

+0

是的,部分可以工作,但我不确定它是否在语法上正确。 – caarlos0

+0

好的,谢谢你的建议,我会尝试一个部分并在这里发布结果。:-) – Jan