Pau*_*der 35 javascript forms ruby-on-rails
使用form_for帮助程序和text_field调用时,Ruby on Rails将<input />为其输出的元素生成唯一的id .如何生成相同的ID以便以后包含在以后生成的JavaScript中?
<%= form_for @user do |f| %>
<%= f.text_field :username %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后在页面中:
<%= javascript_tag do %>
$('<%= id of the :username field %>').doSomethingReallyCool();
<% end %>
Run Code Online (Sandbox Code Playgroud)
Pau*_*der 22
我最终创建了一个自定义表单构建器来直接公开属性
class FormBuilder < ActionView::Helpers::FormBuilder
def id_for(method, options={})
InstanceTag.new( object_name, method, self, object ) \
.id_for( options )
end
end
class InstanceTag < ActionView::Helpers::InstanceTag
def id_for( options )
add_default_name_and_id(options)
options['id']
end
end
Run Code Online (Sandbox Code Playgroud)
然后设置默认表单生成器
ActionView::Base.default_form_builder = FormBuilder
Run Code Online (Sandbox Code Playgroud)
Mat*_*tti 12
查看表单构建器选项:
<%= form_for @user do |f| %>
<% form_css_id = "#" + f.options[:html][:id] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
选项至少应包括以下数据:css类,id,http方法和真实性标记.
至少在 Rails 7 中,有一个方法field_id(user, :password)可以返回user_password输入的 id。
如果有人从fields_for块中获得FormBuilder 对象,则可以id使用以下代码段获取它:
<%= form.fields_for :something do |fields_form| %>
<%= fields_form.object_name.gsub(/[\[\]]+/, '_').chop %>id
<% end %>
Run Code Online (Sandbox Code Playgroud)
FieldsForm#object_name像这样返回字段的 ID:user[address][0]。接下来,正则表达式替换将一个或多个括号的组更改为下划线。这种替换会留下一个尾随下划线,并在其上附加字母id。对于之前提供的示例,这将导致user_address_0_id.
在 Rails 4.1 中,我可以通过以下方式获取 id:
ActionView::Base::Tags::Base.new(
f.object_name,
:username,
:this_param_is_ignored,
).send(:tag_id)
Run Code Online (Sandbox Code Playgroud)
它适用于嵌套表单 ( fields_for)。
| 归档时间: |
|
| 查看次数: |
12356 次 |
| 最近记录: |