简单表单自定义组件不会向输入添加属性

时间:2015-03-18 02:02:21

标签: ruby-on-rails simple-form

我想要一个可以添加两件东西的组件。首先,为用户提供反馈,以查看剩余的字符数(后来通过JS更新)。其次,要使用JS的输入的属性(字段限制)。

我已经关注this,而且几乎只是从one的内置组件中复制/粘贴。反馈显示正确,但输入中不存在:maxlength

module SimpleForm                                                                                                                                                             
  module Components                                                                                                                                                           
    module CharCounter                                                                                                                                                        
      def char_counter(wrapper_options = nil)                                                                                                                                 
        if options[:char_counter].present?                                                                                                                                    
          input_html_options[:maxlength] = limit                                                                                                                              
          "<span>#{limit - object.read_attribute(attribute_name).length }</span>".html_safe                             
        end                                                                                                                                                                   
      end                                                                                                                                                                     

      def has_char_counter?                                                                                                                                                   
        char_counter.present?                                                                                                                                                 
      end                                                                                                                                                                     
    end                                                                                                                                                                       
  end                                                                                                                                                                         
end

wrapper.rb

...
b.optional :char_counter, wrap_with: { tag: 'p', class: 'help-block text-right' }
...

html输出

<div class="form-group string required activity_name">
  <label class="string required control-label" for="activity_name">
    Name <abbr title="required">*</abbr>
  </label>
  <input class="string required form-control" type="text" value="" name="activity[name]" id="activity_name">
  <p class="help-block text-right">
    <span>73</span>
  </p>
</div>

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,经过几天的SimpleForm代码挖掘后,我意识到了这一点 元素顺序非常重要

wrapper.rb

b.optional :char_counter, wrap_with: { tag: 'p', class: 'help-block text-right' }

必须在

之前
b.use :input