【问题标题】:Checkbox and Ajax复选框和 Ajax
【发布时间】:2012-03-20 16:37:49
【问题描述】:

我正在创建一个 Rails 3.1 Ruby 1.9.2 Web 应用程序。 我有一个名为 BulkWarehouse 的模型,我有一个视图显示我的数据库上的所有 BulkWarehouse 对象。这是我的控制器:

def index
@bulk_all = BulkWarehouse.all
@bulk_out = Array.new
end

这是我的观点:

 <%= form_for :warehouse, :url => warehouses_path, :html => { :class => :form } do |f| -%>
         <div class="content">          
    <h2 class="title"><%= t("web-app-theme.all", :default => "Prodotti")  %>   da caricare a sistema</h2>
          <%= f.fields_for 'hardware' do |hw|%>
  <div class="group">
    <%= hw.label 'brand', t("activerecord.attributes.warehouse.hardware.brand_id", :default => "Marca"), :class => :label %>
    <%= hw.select 'brand_id', options_for_select(@brands),{:include_blank => true}, :class => 'text_field' %>
    <span class="description">Marca dell'hardware</span>
  </div>
    <div class="group">
    <%= hw.label 'model', t("activerecord.attributes.warehouse.hardware.brand_id", :default => "Modello"), :class => :label %>
    <%= hw.select 'model', options_for_select(@hardwares),{:include_blank => true}, :class => 'text_field' %>
    <span class="description">Marca dell'hardware</span>
  </div>
<% end %>


  <div class="group">
    <%= f.label 'state', t("activerecord.attributes.warehouse.state_id", :default => "State"), :class => :label %>
    <%= f.select('state_id', @states,{:include_blank => true}, :class =>'text_field') %>
  <span class="description">In che stato si trova ?</span>
  </div>
  <div class="group">
     <%= f.label 'position', t("activerecord.attributes.warehouse.registry_to_id", :default => "Magazzino fisico"), :class => :label %>
     <%= f.select('position_id', @positions,{:include_blank => false}, :class =>'text_field') %>
  </div>



  <div class="group">
    <%= f.label 'logicalwarehouse', t("activerecord.attributes.warehouse.logicalwarehouse_id", :default => "Magazzino Logico"), :class => :label %>
    <%= f.select('logicalwarehouse_id', @logicalwarehouses,{:include_blank => false}, :class =>'text_field',:order =>:id) %>
    <span class="description">In quale magazzino logico è stato spostato?</span>
  </div>

  <div class="group">
    <%= f.label 'extra', t("activerecord.attributes.warehouse.extra_id", :default => "Extra"), :class => :label %>
    <%= f.select('extra_id', @extras,{:include_blank => false}, :class =>'text_field') %>
    <span class="description">Campo Extra</span>
  </div>
<% end -%>





    <table class="table">
        <tr>             
          <th class="first">Asset</th>
                    <th>
            <%= t("activerecord.attributes.logicalwarehouse.name", :default => t("activerecord.labels.name", :default => "Seriale")) %>
          </th>

          <th class="last">&nbsp;</th>
        </tr>
        </tr>
        <%
    @bulk_objects.each do |bulk_warehouse|
      bulk_error = @wh_errors[:"bulk_warehouse#{@count}"] if @wh_errors      
-%>


            <tr class="<%= cycle("odd", "even") %>">
              <%= hidden_field_tag("bulk_warehouse_id#{@count}",bulk_warehouse.id) %>
              <td><%= text_field_tag("bulk_warehouse_serial#{@count}", bulk_warehouse.serial, :disabled => true) %></td>
              <td><%= text_field_tag("bulk_warehouse_asset#{@count}", bulk_warehouse.asset, :disabled => true)%></td>


              <td><%= check_box_tag "enable_record#{@count}",1,false,{:onclick => "bulk_warehouse_serial#{@count}.disabled = 
                                                                                bulk_warehouse_asset#{@count}.disabled = 
                                                                                !this.checked;"}%></td>
                    <td class="last">
                <%= link_to "#{t("web-app-theme.delete", :default => "Delete")}", bulk_warehouse_path(bulk_warehouse), :method => :delete, :confirm => "#{t("web-app-theme.confirm", :default => "Are you sure?")}" %>
              </td>
              <td><div class="fieldWithErrors" style="color=red"><%= bulk_error -%></div></td>

            </tr>
          </div>          

    <% 
        @count = @count +1
      end
    %>

      </table>

 <script>
      $(document).ready(function() {
          $('.pagination a').attr('data-remote', 'true');
      });
    </script>
    <%= will_paginate @bulk_objects, :params=>{:id=>params[:id]} %>

如您所见,@bulk_objects 中包含的每个 bulk_warehouse 项目都有一个复选框标记。 现在我希望当我单击复选框时,与复选框相关的 bulk_warehouse 对象必须附加到控制器中定义的 @bulk_out 数组。我知道我可以使用 Jquery 做到这一点,但我不知道如何。 谁能帮帮我?

【问题讨论】:

  • 您应该始终使用所有适用的语言标记您的问题。

标签: jquery ruby-on-rails ajax ruby-on-rails-3


【解决方案1】:

这是一个使用 ajax 从视图中实时编辑/保存的 jquery 和视图代码示例。虽然我不确定这就是你要找的东西。

在 application.js 中:

 jQuery('#tranx_field').live('change', function() {
    var attr_value = $(this).val();
    var attr_name =  $(this).next("input[id=attr_name]").val();
    var tranx_id = $(this).parent().parent().parent().children("input[id=tranx_id]").val();

    $.ajax({
        url: "/tranxes/" + tranx_id,
        dataType: "json",
        type: "PUT",
        processData: false,
        contentType: "application/json",
        data: "{\"tranx\":{\"" + attr_name + "\":\"" + attr_value + "\"}}"
    });
 });

以及查看代码:

<%= hidden_field_tag 'tranx_id', @tranx.id %>
    <div class="row">
      <div class="span6 id="left_col">
            <b>Salesrep:</b>
                <%= text_field_tag 'tranx_field', @tranx.salesrep,:class => "itemfieldsm" %>
                <%= hidden_field_tag 'attr_name', "salesrep" %>
            <br>

这里是帮助我解决这个问题的链接:http://blog.project-sierra.de/archives/1788

【讨论】:

    【解决方案2】:

    关于访问 js.erb 文件中的实例变量是否是一种好习惯存在一些争论,但这是可能的。以下是如何设置的简要概述。

    创建一个 js.erb 文件(或者,如果您已经有一个适合此视图的 js 文件,只需添加 .erb 扩展名。在 js.erb 文件中,您可以像在视图中一样访问实例变量,使用

    &lt;%= @bulk_out %&gt; 语法。

    希望这会为您指明正确的方向。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2011-12-23
      相关资源
      最近更新 更多