2016-03-23 6 views
1

AJAXリクエストが実行されると、show.js.erbは部分_article.hamlをレンダリングします。私はshow.js.erbで行うことができるようにしたいどのようなレンダリングJS.ERBの結果が生コード

は書くことです:

<%= j render 'article' %> 

それは私が(上記の例では、部分的にレンダリングされません)JavaScriptでこれをラップするために必要なのです.js拡張子を持っているので、そう: - HTMLとエスケープJS含む

'<%= j render 'article' %>' OR ('<%= j render 'article' %>'); 

これは、部分的なものの 生のコードとをレンダリングします。

('things will go back to \"normal.\"<\/p>\n\n'); 

これを行うには適切な方法はありますか?

welcome#index

.ajax_load.article-content{ data: { 'remote-url' => article_path(@article) } } 

articles.js

$(document).ready(function() { 
    $('.ajax_load').each(function(index, element) { 
    var url = $(element).data('remote-url') 
    if (url) { 
     $.get(url, function(responseText) { 
     $(element).html(responseText); 
     }) 
    } else { 
     console.log("missing url for ajax!") 
    } 
    }) 
}) 
+0

jQueryの 'HTML(文字列)'関数は、実際にHTMLにテキストを変換する必要があります(doc:http://api.jquery.com/html/から)。 showアクションでJS呼び出しのレスポンスとして 'render 'article''を実行しようとしましたか? – MrYoshiji

+0

'.text(responseText)'を使ってみてくださいが、うまくいきません - 最終的には '.html($。parseHTML(responseText))'を試してください – MrYoshiji

+0

質問はまだjQueryとしてタグ付けされていません。 'jQueryでAJAXレスポンスを追加するとHTMLがレンダリングされない 'のように、より良い質問タイトルを使用する可能性があります。 – MrYoshiji

答えて

1

:ほとんどの場合、あなたはjQueryを使ってページ上のコンテナをつかむだろうし、そこのような部分を挿入します。

アヤックス:

$(document).ready(function() { 
     $('.ajax_load').each(function(index, element) { 
     var url = $(element).data('remote-url') 
     if (url) { 
      $.get(url, function(responseText) { 
      $(element).html(responseText); 
      }, 'html') 
     } else { 
      console.log("missing url for ajax!") 
     } 
     }) 
    }) 

articles_conrollerは、直接部分_articleをレンダリング:

def show 
    #respond to JS 
    respond_to do |format| 
     format.js { render :partial => "article" } 
    end 
end 

welcome#index

.ajax_load.article-content{ data: { 'remote-url' => article_path(@article) } } 
0

あなたは部分的にレンダリングする場所を決定する必要があります。この答えは@MrYoshijiに属し

$('#article-container').html('<%= j render 'article' %>'); 
+0

あなたの答え、Brandonに感謝します!私はjQueryのセレクタは不要だと思っています。部分的な部分をレンダリングする場所が分かっているからです。唯一のことは、ひどいエスケープでそうすることです。どう思いますか?私はまた、より多くの情報で私の答えを更新しました。 – Liroy

+0

ああ、私はあなたがカスタムjQueryでそれを蹴散らしていたことを認識していませんでした。リンクやボタンなどで 'remote:true'を使用していた場合は、セレクタを部分的に含めることになります。この場合、JSONをコントローラからレンダリングして、ビューではなく、上記のjQueryのJSONを部分的にレンダリングします。 – brandonhilkert

+0

これは理にかなっていますが、ボタンなどの要素をビューに追加する必要があるため、JSONデータではなくビューとしてレンダリングする方が良い解決策になると思います。それは完璧に動作するように見えるのは、エスケープ固定を必要とするだけです。 – Liroy

関連する問題