在我们开始之前先提醒一下。我对此不太确定,但我认为request
是rails中的保留字。
JS
这只是观察下拉列表并执行 ajax 调用
$(document).ready(function() {
$('#request_product_id').change(function() {
$.ajax({ url: '/products/' + this.value + '/form_partial' });
});
});
ROUTES
这里也没什么特别的。只需设置一个ajax触发时将前往的路线
resources :products do
get :form_partial, on: :member
end
控制器
我们只是使用获取产品:id
这是从 ajax 传递的
def form_partial
@product = Product.find params[:id]
end
JS模板
你需要创建一个form_partial.js.erb
这将根据产品呈现部分。下面的代码将部分内容附加在product_field
div
# app/views/products/form_partial.js.erb
$('#product_partial').remove();
<% if @product.id == 1 %>
$('#product_field').after('<div id="product_partial"><%= escape_javascript render('partial1') %></div>');
<% else %>
$('#product_field').after('<div id="product_partial"><%= escape_javascript render('partial2') %></div>');
<% end %>
更新:适用于 Rails 2.x
我们只需要更改路线和 js 模板即可在 Rails 2.x 上运行
路线 2.x
map.resources :products, member: { form_partial: :get }
JS 模板 2.x
如果我没记错的话,该文件应该命名为form_partial.js.rjs
。这会给你一个page
您可以使用它来添加 js 变量。
# app/views/products/form_partial.js.rjs
page << "$('#product_partial').remove();"
page << "<% if @product.id == 1 %>"
page << " $('#product_field').after('<div id="product_partial"><%= escape_javascript render('partial1') %></div>');"
page << "<% else %>"
page << " $('#product_field').after('<div id="product_partial"><%= escape_javascript render('partial2') %></div>');"
page << "<% end %>"