簡體   English   中英

如何在Ruby on Rails 3中從視圖助手添加動態Javascript代碼?

[英]How to add dynamic Javascript code from view helper in Ruby on Rails 3?

請考慮以下代碼來自其中一個視圖文件:

<table>
  <tr>
    <th><%= f.label(:shop, "Shop:") %></th>
    <td><%= select_with_new_option(f, :shop, :name, :id) %></td>
  </tr>
  ...
</table>

select_with_new_option是我的助手方法,它在app/helpers/application_helper.rb定義。 它會生成一個選擇框,其中包含本例中的所有商店以及“創建新商店”選項。

我想添加一個將顯示的Javascript代碼:

<div>
  <label for="new_shop">New shop:</label>
  <input id="new_shop" name="new_shop" type="text" />
</div>

選擇“創建新店”選項后。

是否可以從select_with_new_option生成此Javascript代碼,或者我應該以其他方式執行此操作?

由於看不到您生成的代碼,因此我只是在進行彌補,但是您必須進行微調以適合您的需求...(這還假設您使用的是jQuery,請根據需要進行修改)。

假設您的輸出看起來像:

表格代碼等

<select id="shop_select">
  <option value="new">New Shop</option>
  <!-- other options -->
</select>

在頁面的某個地方生活你的div

<div id="new_shop_holder" style="display: none;">
  <label for="new_shop">New shop:</label>
  <input id="new_shop" name="new_shop" type="text" />
</div>

<script type="text/javascript">    
$(function(){
  var $new_shop_holder = $('#new_shop_holder');
  $('select#shop_select').change(function(e) {
    if (this.value == 'new') { $new_shop_holder.show(); }
    else { $new_shop_holder.hide(); }
  });
});
</script>

你可以試試

<%= select('shop','name',get_shop_name,{:include_blank =>“Create”} ,: onchange =>“show_new_form();”)%>

其中show_new_form是用於隱藏和顯示您的新店主div的javascript,或者您可以使用

<%= select('shop','name',get_shop_name,{:include_blank =>“Select”} ,: onchange =>“new Ajax.Updater('options','action_url',{asynchronous:true,evalScripts: true,參數:值})“)%>

以及控制器中的動作

def action_url
渲染:update {|頁面| page.replace_html“new_shop_holder”,:partial =>'add_new_shop'} if value ==“”
結束

如果選擇創建商店,這將調用具有表單的部分進入新商店。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM