2013-01-18 38 views
1

我有一個Bootstrap模式的Rails應用程序。Rails Bootstrap模態傳遞值沒有javascript?

下面是代碼的一部分啓動模式:

<a type="button" class="btn" href="#labor_modal" data-toggle="modal" data-woid= <%= workorder.id %>><i class="icon-time"></i></a> 

下面是模態的部分代碼:

<div class="modal fade" id="labor_modal"> 
    <div class="modal-header"> 
    <a class="close" data-dismiss="modal">&times;</a> 
    <h3>Add Labor</h3> 
    </div> 
    <div class="modal-body"> 
    <%= simple_form_for(Event.new, validate: true, remote: true, html: {"data-type" => :json}) do |f| %> 
    <%= f.hidden_field :workorder_id, :value => data-woid.val() %> 

我想要得到的工作order.id傳遞給模式,因此可以保存在新記錄中。

這個代碼不工作:

<%= f.hidden_field :workorder_id, :value => data-woid.val() 

任何幫助,將不勝感激!

PS - 我希望我可以做到這一點沒有jQuery - 但是,如果我需要它,就這樣吧。

+0

你必須使用一個javascript,並且這個解決方案對我來說有最乾淨的解決方案http://stackoverflow.com/a/24962060/1612469 – Aleks

回答

0

<%= %>是ERb(嵌入式Ruby)標籤。裏面應該是Ruby代碼。

data-woid.val() 

在您使用它的上下文中無效。

在呈現HTML之前處理ERb。在處理ERb時,Ruby不知道DOM或呈現的HTML元素或其屬性。沒有辦法通過ERb在Ruby中讀取HTML數據屬性。在頁面呈現和DOM構建完畢後,您必須訪問它們。爲此使用JavaScript/jQuery。

我猜work_order.id將用於設置關聯。將此泄露給用戶是不安全的;可以在提交之前將值更改爲任何值。在您撥打save之前,應在控制器中設置關聯,具體爲create操作。

+0

它將在一個隱藏的輸入字段 – Reddirt

+0

行 - 我會嘗試使用jquery – Reddirt

+0

隱藏的輸入僅從視圖中隱藏。它們仍然存在於DOM中,可以通過一點JavaScript來修改。或者可以保存頁面源,修改它,在另一個窗口中打開,然後發佈表單。或者通過curl發佈更改的請求。隱藏的字段不安全。 – Substantial

0

那麼問題說沒有JavaScript。我的答案可能不適用於任何場景或完美回答問題,加上它不會縮放,但它不使用JavaScript!

所以我會做的是根據參數創建儘可能多的模態,因爲我需要。我會通過給他們分配不同的ID。這可以在rails上動態完成。

然後,每個環節會打開(顯示)與其相配套的模式,它會看起來像一個參數被送往,因爲每個模式將有必要的信息,設置在渲染時。