2010-06-23 62 views
0

我正在使用允許用戶將新內容添加到裝運框的工具。例如:在rails中獲取父元素的標識rjs

用戶正在設置一個貨件,每個貨件可以包含多個箱子,每個箱子可以包含多個內容。

所以我link_to_remote連接,如:

在我的貨箱部分:

<div class="shipping_box" id="shipping_box"> 
    #some code 
    <%= link_to_remote "Add box conents", :url => {:action=> 'add_box_contents'} %> 
</div> 

add_box_contents.rjs

page.insert_html :bottom, "shipping_box", :partial => 'box_content', :object => BoxContent.new 

_box_content.erb

<div class="box_contents" id="box_contents"> 
    box contents partial rendered 
</div> 

對於我的第一個裝運箱來說一切正常,但是當第二個裝運箱動態添加時,_box_content.erb局部總是會在第一個箱子的<div>中呈現。當然,這是因爲id被指定爲shipping_box,並且所有框都共享此ID。那麼我的問題是,我如何將新盒子的內容部分呈現在正確包含盒子的div中,而不僅僅是第一個盒子?

此屏幕截圖顯示了第一個包含2個動態添加的內容行(下拉菜單)的框。我希望第二個框的「添加訂單行項目」行爲我的第二個框的內容添加一個下拉列表。 alt text http://img12.imageshack.us/img12/6274/screenshot20100622at114.png

+0

出於好奇,你使用jRails插件? (希望如此;然後我們可以使用jQuery) – 2010-06-23 20:39:04

+0

目前不是,但如果這是最簡潔的方式,我可以。你有什麼建議? – SooDesuNe 2010-06-24 00:50:41

回答

0

你的RJS或許應該使用的replace_html()代替insert_html()

page.replace_html "shipping_box", :partial => 'box_content', :object => BoxContent.new 
+0

我試圖添加新的框內容的多個實例。我添加了一個屏幕截圖來澄清。 – SooDesuNe 2010-06-23 03:49:48

0

實際上,你想呈現的部分「select_order_line」,這樣纔有相應的部分被添加到包裝箱。所以只是把它分解出來,然後你可以寫:

page.insert_html :bottom, "box_content", :partial => 'select_order_line'