渲染JS.ERB导致原始代码

时间:2016-03-23 12:24:43

标签: javascript jquery ruby-on-rails

执行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!")
    }
  })
})

2 个答案:

答案 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