19
我有一個小小的演示設置,點擊複選框可以通過AJAX切換屬性。它工作正常,但Rails真的想渲染一些東西,所以我基本上在我的視圖中創建了一個空白的toggle.js.erb文件。問題Rails複選框AJAX調用,不想渲染任何東西
控制器動作:
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的給我一個錯誤,說它試圖渲染一些東西。
最終,我想都不必有一個空白的toggle.js.erb文件,並且我想將這個Prototype的東西放到我的靜態JavaScript中並且不在視圖中。
我對Rails很新,所以可能有一個更簡單的方法來做到這一點,但我有點卡在這裏。
謝謝!這絕對有效。你的切換方法比我的好得多。前一個線程中的某個人已經提出了關於有人發送垃圾郵件複選框可能會導致切換準確性的擔憂,但是我剛剛做出這樣的設置,以便點擊後禁用複選框,直到AJAX事件返回成功爲止。 – clem 2011-03-25 03:10:06
完美:) 如果你需要設置一個狀態碼,並立即從你的控制器方法返回:'render:nothing => true,:status => 404並返回' 希望它有幫助! – lboix 2014-06-06 03:30:42