オブジェクトTask
にはboolean
フィールドが含まれていますdone
。Ajax
ステータス変更後にページを更新するにはどうすればよいですか?そして代わりにtrue
-false
表示値が完了しました-不完全ですか?
routers.rb:
resources :tasks do
member do
post 'done'
end
end
コントローラ:
def done
@task = Task.find(params[:id])
@task.update_attributes(:done => params[:done])
respond_to do |format|
format.js {}
end
end
見る:
....
<td><%= task.done %></td>
<td><%= check_box_tag 'done', task.id , task.done, :class => "task-check", remote: true %></td>
....
<script>
$(".task-check").bind('change', function(){
$.ajax({
url: '/tasks/'+this.value+'/done',
type: 'POST',
data: {"done": this.checked},
});
});
</script>
編集されたスクリプト
<script>
$(".task-check").bind('change', function(){
$.ajax({
url: '/tasks/'+this.value+'/done',
type: 'POST',
data: {"done": this.checked},
}).done(function(ajax_response){
location.reload();
});
});
</script>
およびコントローラー
def done
@task = Task.find(params[:id]) # make sure you have this
@task.update_attributes(:done => params["done"])
render :json => { data: "Success", is_done: params[:done] }
end
再起動せずにページコンテンツを更新するにはどうすればよいですか?
コントローラ:
def done
@task = Task.find(params[:id]) # make sure you have this
@task.update_attributes(:done => params["done"])
render :json => { data: "Success", is_done: params[:done] }
end
見る:
....
<td><%= task.done %></td>
<td><%= check_box_tag 'done', task.id , task.done, :class => "task-check" %></td>
....
<script>
$(".task-check").on('change', function(e){
// removed remote-true. you can preventDefault if you need to but doubt page tries to refresh from a checkbox getting checked. e.preventDefault() if you need it
$.ajax({
type: "POST",
url: '/tasks/done',
type: 'POST',
data: {done: $('.task-check').val()},
}).done(function(ajax_response){
// update whatever you want after it completes
});
});
</script>
これをテストしませんでしたが、私はいつもこれらを書いています。ペイロードの後で機能しない場合はお知らせください。不足しているものを特定します。
値を「incomplete」から「complete」に更新するだけの場合は、incompleteと呼ばれる要素をターゲットにするだけです。たとえば、「task-status」のクラスがある場合は、その要素をターゲットにして、関数の.done部分で更新できます。例えば:
$('.task-status').text('Complete')
以前に不完全と言ったものを置き換える必要があります。テキスト入力の場合は、代わりに.val()を使用できます。ページ上のテキストだけの場合は、.text()が機能するはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加