2013-03-21 63 views
-1

Hoi,部分渲染但未显示

我试过(并且成功:-)来构建一个rails页面,我可以通过drag'n drop来更新对象。 我在表格中显示卡片,如果它们被放入列中,属性被更新。到目前为止这么好,但不幸的是更新没有反映在卡上。我需要重新加载整个网站看看吧(是的,我用<%= ... :-)在日志中我看到,部分呈现:

Started PUT "/cards/6" for 127.0.0.1 at 2013-03-21 16:55:42 +0100 
Processing by CardsController#update as JS 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"B+xkdpwcIcslidgHQPh+I1n+Qh/MxltM=", "card"=>{"user_id"=>"2", "state_id"=>"1"}, "id"=>"6"} 
Card Load (0.1ms) SELECT "cards".* FROM "cards" WHERE "cards"."id" = ? LIMIT 1 [["id", "6"]] 
(0.1ms) begin transaction 
(0.2ms) UPDATE "cards" SET "user_id" = 2, "updated_at" = '2013-03-21 15:55:42.630330' WHERE "cards"."id" = 6 
(3.2ms) commit transaction 
State Load (0.1ms) SELECT "states".* FROM "states" WHERE "states"."id" = ? LIMIT 1 [["id", 1]] 
Rendered cards/_card.html.erb (2.8ms) 
Completed 200 OK in 9ms (Views: 3.5ms | ActiveRecord: 3.8ms) 

但在浏览器user_id仍然是3.所以我试图还显示通知:

format.js {render @card, notice: "nanu"} 

但是没有成功,通知也没有显示。

我的部分看起来像这样:

<%= form_for(@card, remote: true) do |f| %> 
    <div id="card_<%= @card.id %>" class="card_mini"> 
    <h3><%= link_to @card.titel, edit_card_path(@card) %></h3> 
    <p><%= @card.beschreibung %></p> 
    <%= @card.user_id %> <!-- just to control the rendering --> 
    <%= f.text_field :user_id, type: "hidden" %> 
    <%= f.text_field :state_id, type: "hidden" %> 
    <div class="status"><%= @card.state_id ? State.find(@card.state_id).status : "--" %></div > 
    <%= link_to 'Destroy', @card, method: :delete, data: { confirm: 'Are you sure?' }, :class => "aktion" %> 
    </div> 
<% end %> 

你对我有什么提示吗? 谢谢, S.

+2

请问您可以添加如何渲染该部分的js代码 – ck3g 2013-03-21 16:52:10

+0

我通过控制器渲染部分 - 只需在js上使用“提交”上的“点击”即可。我认为轨道照顾异步调用? – McSvenster 2013-03-21 18:11:22

+0

它的确如此。但不会更改您的DOM。我刚刚在答案中添加了一个例子。 – ck3g 2013-03-21 19:04:10

回答

0

根据评论来判断,您必须更新您的update.js.erb中的DOM。如下所示:

$("#<%= dom_id(@card) %>").append("<%=j render 'card/card', card: @card %>"); 
+0

非常感谢!我会试试这个。 – McSvenster 2013-03-21 22:05:43

+0

这不起作用 - update.js.erb似乎没有被“启动”。我试图展示一个简单的警报(“Hallo Welt”);但是,谢谢你 - 我会继续朝这个方向看。 – McSvenster 2013-03-22 06:29:14

+0

我正在接近......我在控制器中犯的第一个错误:我在Format.js行中放置了一个渲染器@card ... – McSvenster 2013-03-22 06:54:18

0

谢谢ck3g的帮助!现在它可以工作。我必须学习两件事:

  1. Rails负责处理ajax请求,但不处理DOM的更新。这就是xxx.js.erb进入舞台的地方。
  2. 从来不把format.js后描绘要求

因此,在控制器中正确的调用是:

respond_to do |format| 
    format.html { render action: "whatever you want, or redirect or..." } 
    format.js 
end 

然后轨将呈现action.js.erb(在我的情况更新.js.erb)。 我需要在update.js.erb的代码是:

$("#card_<%= @card.id %>").html('<%=j render @card %>'); 

现在在我的日志,我觉得局部的渲染和update.js.erb的渲染。

+0

查看http://apidock.com/rails/ActionController/RecordIdentifier/dom_id – ck3g 2013-03-22 09:02:18