在页面加载时将部分注入DOM

时间:2014-03-14 12:29:20

标签: javascript ruby-on-rails

我的数据存储在“版本”模型的“代码”列中。在显示页面上,我想在页面加载时将该数据注入到#canvas的html中。当页面加载时,#canvas中没有内容。

/ui.html.erb

<%= form_for @version, remote: true do |f| %>       
  <%= f.text_field :name %>
  <%= f.text_field :description %>
  <%= f.hidden_field :code, id: "version-content" %>
  <%= f.submit "Save Version", id: "submit-version" %>
<% end %>

versions_controller.rb

def create
  @version = Version.new(creation_params)

  if @version.save
    flash[:success] = "Version saved."
    redirect_to @version
  else
    render :new
  end

  respond_to do |format|
    format.html
    format.js
  end
end

版本/ create.js.erb

$('#canvas').html("<%= escape_javascript(render(partial: 'versions/code')).html_safe %>");

版本/ _code.html.erb

<%= @version.code %>

版本/ show.html.erb

<div id="canvas"></div>

2 个答案:

答案 0 :(得分:0)

你确定你做了你想做的事吗? 现在,这个代码会在您访问时显示您的show.js.erb,例如/:controller/show.js,我相信它不会渲染html变体。所以你的js没有插入内容的地方。 如果你想在部分内部渲染部分,请将其添加到部分(猜/views/show.html.erb)

<%= render partial: 'shared/code' %>

如果在成对视图中呈现部分,则使用共享文件夹是最佳做法。确保在views目录的share文件夹中有_code.html.erb。

答案 1 :(得分:0)

您如何访问show动作? JS会被触发吗?

您对show动作的链接是否包含remote: true? 或

如果没有远程链接,JS中的onload函数在哪里?

如果请求是按Javascript进行的话,

show.js.erb只会被触发!

表格:

<%= form_for @something, remote: true do |f| %>

<% end %>

更新versions_controller.rb:

def create
  if @version.save

    respond_to do |format|
      format.html { redirect_to @version }
      format.js
    end

  else
  ... 
  end
end