![](/img/trans.png)
[英]How can I return javascript from a Ruby on Rails helper method?
[英]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 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.