笔记2

昨天,已经弄好了项目的显示和添加模块,今天继续完成了项目职能的添加及职能负责人的添加
1、分类的select选择标签
需求:在选择职能名称时,有大类和小类之分,为了更方便用户选择,需要一个可以分类的选择框;
解决方法:在helper中定义一个函数,用改函数按类型生成select的html代码,在将html代码插入到视图代码中即可;具体实现代码为:

def role_selector(obj,name,value)
    html = "<select name='#{name}' id='#{name}' size='10'>"
    role_groups = RoleGroup.find(:all)
    for role_group in role_groups
      html += "<option value=''>#{role_group.name}</option>"
      for role in role_group.project_roles
        sel = (role.id == value.to_i ? " selected='selected'" : "")
        html += "<option value='#{role.id}' #{sel}>&nbsp;&nbsp;&nbsp;#{role.name}&nbsp;&nbsp;&nbsp;</option>"
      end
    end
    html += "</select>"
  end

2、rails中ajax的应用
在添加职能时,对于不同的职能都有不同的公司与之想对应,不同的公司又有不同的联系人;
其具体过程为:针对某个职能选择某个公司,可先输入改公司名称,再进行搜索(这个过程需要用到一个form_remote_tag来处理);
搜索到的公司会由一个select标签存起来,在其中选择相应的公司,同时,与该公司对应的联系人也会出现在另一个select标签中(该过程需要在select标签的onchange事件中
添加ajax来处理,以获得联系人);

公司搜索的ajax代码为:

    <%=  form_remote_tag :update=>"add_form",:url=>{:action=>"firm_select"}%>
      <input type="text" name="firm_name" size="20">
      <input class="button" type="submit" value="搜索并添加公司">
    <%= form_tag%>
注:以上form_remote_tag标签的结束标签已由原来的end_form_tag改为form_tag;

onchange时间中的ajax实现:

<%=select_tag "firm_id",options_for_select([["",""]][email protected]{|f| ["#{f.name}",f.id]}),
  {:onchange=>"new Ajax.Updater('add_contact','/project/contact_select?firm_id='+this.value,{asynchronous:true})"}%>


你可能感兴趣的:(html,Ajax,F#,Rails)