1

我是 Rails 新手,我正在尝试找出一种更好的方法:我使用从 YAML 文件读取的 Rake 任务将一些种子数据加载到我的数据库中。

模板.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

在我看来,我有一个下拉菜单,用户可以在其中选择要加载的模板,并且根据他选择的模板,我需要显示文本框以获取运行模板所需的字段。

模板.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]
 .
 .
 .

在我的咖啡脚本中,我做了一堆 if/else 来隐藏和显示这些文本框,具体取决于用户选择的内容。

模板.咖啡:

toggleRequiredFields: ->
  Template = $('#template_name').val()
  if Template in ['Template3','Template2']
    $('#user_id').show();
    .
    .
  else 
    $('#user_id').hide();  
    .
    . 

随着时间的推移,模​​板的数量越来越多,if/else 逻辑变得混乱。当用户选择模板时,是否有更好的方法来执行此隐藏/显示切换?

4

1 回答 1

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()

从这里您可以向模板配置文件添加数十个条目,或者更改显示的字段,您根本不需要更改代码。

于 2013-09-27T18:05:16.960 回答