0

在我的项目中,我有一个一对多的关系(一个客户有很多联系人),现在,我在一个下拉菜单中列出了客户,我想要的是,让选定客户的联系人动态呈现为检查-盒子。

这是我的 _form.html.haml 的(部分),以及发送 Ajax 请求的 jQuery 部分:

  %h4 This meeting is made for :
  = f.input :client_id, collection:(Client.all)
  %br
  %hr     


  %h4 Assign Contacts:
  //HERE WHERE I REALLY WANT THE CHECKBOXES TO BE REDNERED DYNAMICALLY.
  = check_box_tag "contact_ids[]", c.id, @meeting.contacts.include?(c)
  = c.first_name
  %br


  :javascript
    $(document).ready(function (){
      $('#meeting_client_id').change(function(){
      var state = $('#meeting_client_id :selected').val();
      if(state !== "")
      {
        $.getJSON('/clients/client_contacts/' + state, function(data){
        console.log(data);
        })
      }
     return false;
     })
   });

这是我的 Clients_controller 操作,它处理请求:

def client_contacts
  client = (params[:id])
  cou = Contact.where(client_id: client)
  @msg = { "success" => "true", "message" => "hello", "count" => cou}
  respond_to do |format|
    format.html
    format.json { render json: @msg }
  end
end

现在,在控制台中,我可以看到请求正在返回计数和对象。

因此我对 JS/jQuery 真的很陌生,对 Rails 也很陌生,我真的不知道如何从这里获取它。

非常感谢任何提示/文章/链接/帮助或建议。

4

2 回答 2

1

试试这个:

$.getJSON('/clients/client_contacts/' + state, function(data){
    console.log(data);
    data.each(function(){
        var id = data.id;
        var name = data.firstName;
        //add to new div with id myDiv
        $('#myDiv').append('<input name='+ id +' type="checkbox" /> ' + name + '<br />');)
    });
});
于 2013-09-10T14:53:27.400 回答
1

如果您唯一缺少的部分是复选框的创建,您可以尝试这样的事情;

var output = $("some selector for an element containing the checkboxes");

$('#meeting_client_id').change(function(){
    var state = this.value;
    if(state !== "") {
        $.getJSON("/clients/client_contacts/" + state).done(function(data) {
            output.empty(); // clear the container
            // assuming data is an array of strings, modify as needed
            $.each(data, function () { 
                // for each array item in the result, create a checkbox
                $('<input type="checkbox" value="'+this+'">'+this+'</option>')
                    .appendTo(output); // append it to the container
            });
        });
    }
});

我在这里使用的重要部分是:

这是一个演示,我只是使用自定义函数来伪造 ajax 调用。

http://jsfiddle.net/kk622/1/

于 2013-09-10T15:58:14.933 回答