【问题标题】:remote select, controller needs more form data远程选择,控制器需要更多的表单数据
【发布时间】:2012-06-10 16:48:29
【问题描述】:

我在一个表单中有两个选择字段。每次这些选择字段之一更改值时,应更改表单的其余部分。我对选择字段使用了以下代码:

<%= f.collection_select :model1, Model1.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form"  %>
<%= f.collection_select :model2, Model2.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form"  %>

现在的问题是 model3 控制器需要两个 select 字段的值来制定对发送给它的 Ajax 请求的响应,但它只获取刚刚在 params 中更改的 select 字段的值。

如果 model1 字段发生更改,我会得到:

params = {"model3"=>{"model1"=>"2"}}

如果 model2 字段发生更改,我会得到:

params = {"model3"=>{"model2"=>"3"}}

但在这两种情况下我都需要以下内容。

params = {"model3"=>{"model1"=>"2", "model2" => "3"}}

我怎样才能意识到这一点?

也许有一种方法可以在选择字段更改时发送所有表单数据。

谢谢!

【问题讨论】:

    标签: ajax ruby-on-rails-3.1


    【解决方案1】:

    阅读jquery_ujs.js 文件后,我想出了以下解决方案。显然,选择标记的 data-params 属性中存在的数据被添加到使用 ajax 请求发送到控制器的数据中,并且在准备 ajax 请求的最开始时,'ajax:before ' 事件在 select 元素上触发。我使用此事件从表单中读取数据,对其进行序列化并将其放入 select 元素的 data-params 标记中。然后这些数据会自动添加到 ajax 请求中。这是我的代码:

    $(".add_form_data").on('ajax:before', function(event){
        var form = $(this).closest('form');
        var formData = form.serialize();
        $(this).data("params",formData);
    });
    

    剩下要做的就是将add_form_data 类添加到两个选择元素中。

    <%= f.collection_select :model1, Model1.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" :class => "add_form_data"  %>
    <%= f.collection_select :model2, Model2.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" :class => "add_form_data" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 2014-12-27
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多