0
該應用程序有一個類別,類別有子類別和品牌。當用戶選擇分類時,加載分類品牌和子類別。在創造形式中,所有的煩惱都很好。動態變化grouped_collection_select編輯形式
_form.html.slimm
= form_for @advert do |f|
- @advert.errors.full_messages.each do |msg|
div class='msg'
= msg
div class='form-group'
= f.label :category
= f.collection_select :category_id, Category.order(:id), :id, :title, { prompt: t("forms.selecte.choose-category")}
div class='form-group'
= f.label :subcategory
= f.grouped_collection_select :subcategory_id, Category.order(:id), :subcategories, :title, :id, :title,{ prompt: t("forms.selecte.choose-subcategory")}
div class='form-group'
= f.label :brand
= f.grouped_collection_select :brand_id, Category.order(:id), :brands, :title, :id, :title,{ prompt: t("forms.selecte.choose-brand")}
div class='form-group'
= f.label :title
= f.text_field :title, class: 'form-control'
div class='form-group'
= f.label :content
= f.text_area :content, size: '60x12', class: 'form-control'
= f.submit t('forms.buttons.submit')
advert.coffee
ready = ->
jQuery ->
$('#advert_subcategory_id').parent().hide()
$('#advert_brand_id').parent().hide()
subcategories = $('#advert_subcategory_id').html()
brands = $('#advert_brand_id').html()
$('#advert_category_id').change ->
category = $('#advert_category_id :selected').text()
escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options_subcategories = $(subcategories).filter("optgroup[label='#{escaped_category}']").html()
options_brand = $(brands).filter("optgroup[label='#{escaped_category}']").html()
if options_subcategories
$('#advert_subcategory_id').html(options_subcategories)
$('#advert_subcategory_id').parent().show()
else
$('#advert_subcategory_id').empty()
$('#advert_subcategory_id').parent().hide()
if options_brand
$('#advert_brand_id').html(options_brand)
$('#advert_brand_id').parent().show()
else
$('#advert_brand_id').empty()
$('#advert_brand_id').parent().hide()
但在編輯表單代碼是不工作,因爲它應該。子類別和品牌未加載。要更改它們,用戶必須更改類別。加載編輯表單時必須顯示已選擇的子類別和品牌。如何解決它?
解決方案:
$(window).load ->
category = $('#advert_category_id :selected').text()
escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options_subcategories = $(subcategories).filter("optgroup[label='#{escaped_category}']").html()
options_brand = $(brands).filter("optgroup[label='#{escaped_category}']").html()
if options_subcategories
$('#advert_subcategory_id').html(options_subcategories)
$('#advert_subcategory_id').parent().show()
else
$('#advert_subcategory_id').empty()
$('#advert_subcategory_id').parent().hide()
if options_brand
$('#advert_brand_id').html(options_brand)
$('#advert_brand_id').parent().show()
else
$('#advert_brand_id').empty()
$('#advert_brand_id').parent().hide()
代碼複製,但它的工作原理。