有没有办法把它们串在一起,这样它们基本上可以同时协同工作?

时间:2015-03-25 11:38:46

标签: javascript ruby-on-rails ruby ruby-on-rails-4

在我的Rails application.js中我有两个javascripts他们所做的是自动填充我的注册表单。第一个是根据放入我的emp_id text_field的内容,一旦放入其中并与我在其他表中的内容匹配,它将拉出用户的名字和person_id并将它们放在相应的text_fields中。现在我有一个我的第二个javascript来查看person_id text_field中的数据,因为现在从第一个javascript它有数据但是,让第二个工作的唯一方法是如果我更改一个数字并点击标签然后它将填写我的manager_first_name text_field ...有没有办法让第一个javascript拉出初始数据,然后第二个自动对数据做出反应,我必须点击它或更改person_id text_field?

这是我的用户控制器,这些是我的javascipts中的方法。

类UserController< ApplicationController中

 def populate_form
  @visual = Visual.find_by_id(params[:emp_id])
  @emp_first_name = @visual.first_name
  @person_id = @visual.pds_alias

    render :json => {

        :emp_first_name => @emp_first_name,
        :person_id => @person_id

    }

  end

  def populate_manager
    @manager = Manager.find_by_person_id(params[:person_id])
    @mgr_first_name = @manager.mgr_name

     render :json => {

        :mgr_first_name => @mgr_first_name
     }

   end
 end

这是我的观点

<div class='row form-group'>
   <div class='col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5 text-right'>
    <%= f.text_field :emp_id, tabindex: 1, id: 'emp_id', autofocus: true, placeholder: t( 'login_label' ), class: 'form-control' %>
  </div>
</div>

 <div class='row form-group'>
  <div class='col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5 text-right'>
    <%= f.text_field :emp_first_name, tabindex: 1, id: 'emp_first_name', autofocus: true, placeholder: t( 'login_label' ), class: 'form-control' %>
   </div>
 </div>



 <div class='row form-group'>
  <div class='col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5 text-right'>
    <%= f.text_field :person_id, tabindex: 1, id: 'person_id', autofocus: true, placeholder: t( 'login_label' ), class: 'form-control' %>
   </div>
 </div>



 <div class='row form-group'>
  <div class='col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5 text-right'>
    <%= f.text_field :mgr_first_name, tabindex: 1, id: 'mgr_first_name', autofocus: true, placeholder: t( 'login_label' ), class: 'form-control' %>
   </div>
 </div>

这是我的App.js

 $(document).ready(function(){

   $('#emp_id').change(function() {
         var url = "/user/populate_form?emp_id="+$(this).val();
         $.getJSON(url, function(data) {
           if(!(data.emp_first_name === undefined))
           $('#emp_first_name').val(data.emp_first_name);
           if(!(data.person_id === undefined))
           $('#person_id').val(data.person_id);
         });
       }
     );
   });

$(document).ready(function(){

    $('#person_id').click(function() {
         var url = "/user/populate_manager?person_id="+$(this).val();
         $.getJSON(url, function(data) {
           if(!(data.mgr_first_name === undefined))
           $('#mgr_first_name').val(data.mgr_first_name);
         });
       }
     );
   });

1 个答案:

答案 0 :(得分:1)

这个怎么样(假设你有数据作为对象而不是数组,即使你这样做,也可以使用Enumerable),你不必为此使用Javascript Ajax,

def populate_form
  @visual = Visual.find_by_id(params[:emp_id])
  @emp_first_name = @visual.first_name
  @person_id = @visual.pds_alias
  @manager_name = Manager.find_by_person_id(@person_id).mgr_name

    render :json => {

        :emp_first_name => @emp_first_name,
        :person_id => @person_id,
        :mgr_first_name => @manager_name

    }
 end