2016-08-24 5 views
0

問題があります。 Turbolinksは私がポストリクエストajaxはページを変更していません

すべてがうまく動作作成ここ オフになっています。私はここに私のページ

<a class="unpublish" data-method="post" rel="nofollow" data-remote="true" data-id="#{@id}" href="/books/14/unpublish" >Draft</a> 

を、このようなリンクを得る私のスキムテンプレートは

<hr> 
<p>#{@title}</p> 
<p>#{@author}</p> 
<p>#{@description}</p> 
<div class="publishing" id="book_#{@id}"" 
    <a class="publish" href="/books/#{@id}/publish" data-method="post" rel="nofollow" data-remote="true" data-id="#{@id}">Publish</a> 
</div> 

あるしかし、私は、このリンクをクリックしようとすると、その後、目に見えるものは、ページに起こりませんが、XHRをして送信されますプロッパーステータス、エラーなし。その私の謎。 彼女は私がdersperatlyいくつかの助けが必要私のリスナー

$('.publish').bind 'ajax:success', (e, data, status, xhr) -> 
    e.preventDefault()  
    res = $.parseJSON(xhr.responseText) 
    result = publishBooks(res) 
    alert(result) 
    book_id = "#book_" + $(this).data('id') 
    $(book_id).html(result) 

です。助けてください。私がページをリロードすると再びすべてが正常に動作します

Thaks to monsieur VKatz 私は最終的に動作するecsampleを持っています! この

ready = -> 
    createBooks = (res)-> 
     result = JST["templates/create_book"] 
     title: res.book.title 
     author: res.book.author 
     description: res.book.description 
     id: res.book.id 
    result 

    publishBooks = (res)-> 
    result = JST["templates/publish"] 
     time: res.book.published_at 
     id: res.book.id 
    result 

    unpublishBooks = (res)-> 
    result = JST["templates/unpublish"]  
     id: res.book.id 
    result 

    $('.new_book').bind 'ajax:success', (e, data, status, xhr) ->  
    res = $.parseJSON(xhr.responseText)  
    result = createBooks(res)       
    $('.drafts').append(result) 

    $('.publish').bind 'ajax:success', (e, data, status, xhr) ->  
    res = $.parseJSON(xhr.responseText) 
    result = publishBooks(res)  
    book_id = "#book_" + $(this).data('id') 
    $(book_id).html(result) 

    $('.unpublish').bind 'ajax:success', (e, data, status, xhr) -> 
    e.preventDefault() 
    alert('okko okko') 

$(document).ready(ready) 
$(document).on('page:load', ready) 
$(document).on('page:update', ready) 
$(document).on('click', '.unpublish', ready); 

今その作業のようにしか公開されていないクラスを探しますか?私は "出版された"などのようなすべてのクラスのためにこのようなものを設定すべきですか?

答えて

1

あなたがgem 'turbolinks'を追加し、//= require turbolinks

app/assets/javascripts/application.jsの最初の方法を追加する必要があります。だけでなく、我々は DOM readyをリッスンする必要がありますが、我々としても 'page"load'をリッスンするためにも必要です。がわからないので、私の答えはJqueryを尊重していますが、それに応じて変更することもできます。

function initialize(){ 
    $('#your_id').click(function(){ 
    }); 
} 
$(document).ready(initialize); 
$(document).on('page:load', initialize); 

第二の方法:

1:あなたのGemfilejquery-turbolinks gemを要求しなければなりません。

2:編集しますapp/assets/javascripts/application.jsファイル

//= require jquery 
//= require jquery.turbolinks 
//= require turbolinks 

N.B:あなただけのjsファイルにjqueryjquery.turbolinks権利を追加します。


第三の道:Documentオブジェクト上バインドイベント。

function checkAlert(){ 
     // ... 
    } 
$(document).on('click', '#owner_active', checkAlert); 

ご希望の方はこちら!

+0

よろしくお願いします。私はとても疲れています。助けてくれてありがとう!ターボリンクを追加しなければならないのですか、それともjquery-turbolinksで十分ですか?あなたの答えであなたの答えに申し訳ありませんでした。 –

+0

それは助けになりませんでした((( –

+1

) 'turbolinks'はあなたのウェブアプリケーションをより速くナビゲートするコンセプトです[Turbolinks](https://github.com/turbolinks/turbolinks)。他に何か時間をください。あなたに戻ってきます。 – VKatz

関連する問題