执行AJAX请求时,show.js.erb
会呈现部分_article.haml
。
我希望能在show.js.erb
中做的是写:
<%= j render 'article' %>
由于它有.js
扩展名,我需要在JavaScript中包装它(上面的例子不会渲染部分),所以:
'<%= j render 'article' %>' OR ('<%= j render 'article' %>');
这将呈现部分但有 原始代码 - 包括HTML和JS转义。
('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 :(得分:1)
这个答案属于@MrYoshiji。
Ajax:
$(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) } }
答案 1 :(得分:0)
您必须决定部分渲染的位置。在大多数情况下,您使用jQuery抓取页面上的容器并在其中插入部分:
divId = '#'+lastselectedID;
$(divId).hasClass('back'); // return 1 if "back" class exist or 0 if not exist