Rails复选框AJAX调用,不想呈现任何内容 [英] Rails checkbox AJAX call, don't want to render anything

查看:63
本文介绍了Rails复选框AJAX调用,不想呈现任何内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我进行了一些演示,其中单击复选框可以通过AJAX切换属性。它工作正常,但Rails确实想渲染一些东西,因此我基本上是在视图中创建空白的toggle.js.erb文件。

I've got a little demo setup in which clicking a checkbox toggles an attribute via AJAX. It's working fine, but Rails REALLY wants to render something, so I've basically resorted to creating a blank toggle.js.erb file in my views.

控制器操作有问题:

def toggle
  @task = Task.find(params[:id])
  respond_to do |format|
    format.js do
      if (@task.status != true)
        @task.status = true
      else
        @task.status = false
      end
      @task.save
      render :layout => false
    end
  end
end

查看问题:

  <h1>Tasks</h1>
  <ul style="list-style-type: none;">
    <% @tasks.each do |task| %>
      <li id="<%= dom_id(task) %>">
      <%= check_box_tag(dom_id(task), value = nil, checked = task.status) %>
      <%= task.action %> <%= link_to 'Edit', edit_task_path(task) %>
      <%= link_to 'Delete', task, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
      </li>
    <% end %>
  </ul>
  <%= link_to 'New Task', new_task_path %>

  <script>
    $$('input').each(function(el) {
      el.observe('click', function(event) {
        // Get the task ID
        var elId = el.id.split("_")[1];
        // Build the toggle action path
        var togglePath = '/tasks/' + elId + '/toggle/';
        // Create request, disable checkbox, send request,
        // enable checkbox on completion
        new Ajax.Request(togglePath, {
          onCreate: function() {
            el.disable();
          },
          onSuccess: function(response) {
          },
          onComplete: function() {
            el.enable();
          }
        });
      });
    });
  </script>

没有空白的toggle.js.erb文件,Rails仍然给了我

Without the blank toggle.js.erb file I've got in the views, Rails still gives me an error saying that it's trying to render something.

最终,我不想都不必拥有空白的toggle.js.erb文件,而我想想要将Prototype内容放入我的静态JavaScript内容中并从视图中移出。

Ultimately, I'd like to both not have to have a blank toggle.js.erb file, and I'd like to get that Prototype stuff into my static JavaScript stuff and out of the view.

我对Rails还是很陌生,所以可能有一种更简单的方法,但我有点卡在这里。

I'm pretty new to Rails, so there's probably an easier way to be doing this, but I'm kind of stuck here.

推荐答案

render:layout => false 表示您要在不使用布局的情况下渲染切换视图。

render :layout => false means that you want to render 'toggle' view without layout.

如果您根本不希望渲染任何内容,则应使用:无=> true 选项

If you don't want render anything at all, you should use :nothing => true option

def toggle
  @task = Task.find(params[:id])
  @task.toggle! :status

  # if it used only by AJAX call, you don't rly need for 'respond_to'
  render :nothing => true
end

编辑:在Rails4 / 5中,您可以使用 head:ok 代替什么都不渲染:true ,这样做更可取,但是结果是一样的

In Rails4/5 you can use head :ok instead of render nothing: true, it's more preferable way to do this, but result is the same.

这篇关于Rails复选框AJAX调用,不想呈现任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆