我是Rails的新手,我正在尝试找到一种更好的方法:我使用从YAML文件读取的Rake任务将一些种子数据加载到我的数据库中。
Template.YAML:
- file_name: Template1
description: temp1
required_fields: address
- file_name: Template2
description: temp2
required_fields: user_id,user_name
- file_name: Template3
description: temp3
required_fields: user_id,address
在我看来,我有一个下拉菜单,用户可以选择要加载的模板,并且根据他选择的模板,我需要显示文本框以获取运行模板所需的字段。
Template.html.slim:
dt
label for="template_name" Select The Template To Run
dd
= select_tag :template_name,options_for_select(@template_seed_data_array.insert(0, "Please select the template")), :onchange => "Template.toggleRequiredFields(); return false"
#user_id style="display:none"
dt
label for="user_id" Enter User Id
dd
= text_field_tag :user_id, @template_library[:user_id]
#user_name style="display:none"
dt
label for="user_name" Enter user name
dd
= text_field_tag :user_name, @template_library[:user_name]
.
.
.
在我的coffescript中,我会根据用户选择的内容隐藏并显示这些文本框。
Template.coffee:
toggleRequiredFields: ->
Template = $('#template_name').val()
if Template in ['Template3','Template2']
$('#user_id').show();
.
.
else
$('#user_id').hide();
.
.
随着时间的推移,模板的数量会增加,if / else逻辑会变得混乱。当用户选择模板时,有没有更好的方法来执行此隐藏/显示切换?
答案 0 :(得分:1)
如果将Template.YAML
文件作为JSON公开给客户端,这应该很容易。
在视图中的JavaScript标记中添加模板数据的JSON转储:
:javascript
var templates = #{@templates.to_json};
然后写一些代码来读取它:
:coffeescript
template = null
templateName = $('#template_name').val()
# Find the proper template configuration
for templateConfig in templates
if templateName == template.file_name
template = templateConfig # found it!
# Hide all fields.
$('form input').hide() # or whatever selects everything you want to hide
# Show just the fields we need.
for fieldID in template.required_fields
$("##{ fieldID }").show()
从这里,您可以在模板配置文件中添加数十个条目,或者更改显示的字段,您根本不需要更改代码。