我在项目的页面上呈现两种表单类型。我这样做是因为我的用户必须在两个选项之间做出决定,如何继续,这些选项非常相似,包括相同实体的3个下拉列表。
<div id="upload_profile_yes" >
<div id="up_markets_container" class="col-md-4">
{{ form_row(upForm.markets, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id="up_channel1_container" class="col-md-4">
{{ form_row(upForm.channel1, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id = "up_prod_container" class="col-md-4">
{{ form_row(upForm.products, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id ="up_container" class="col-md-12">
{{ form_row(upForm.uploadprofile) }} <br>
</div>
</div>
<div id="upload_profile_no">
<div id="markets_container" class="col-md-4">
{{ form_row(form.markets, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id="channel1_container" class="col-md-4">
{{ form_row(form.channel1, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id = "prod_container" class="col-md-4">
{{ form_row(form.products, { 'attr': { 'class': 'form-inline'} }) }}
</div>
<div id="agencies_container" class="col-md-12">
{{ form_row(form.agencies) }}
</div>
</div>
<br>
</div>
</div>
<script src="{{ asset('js/bootstrap-datepicker.js') }}"></script>
<script src="{{ asset('js/moment.min.js') }}"></script>
<script src="{{ asset('js/bootstrap-multiselect.js') }}"></script>
{# JS functions to validate IATA/UCID/tourcode (and possibly load funds) #}
{% include 'AppBundle:Utils:validation.js.twig' %}
{% include 'DocumentBundle:Document/Utils:agency_selection.js.twig' %}
{% include 'DocumentBundle:Document/Utils:uploadprofile_selection.js.twig' %}
所以对于第一个选择(upload_profile_no)我使用javascript文件 agency_selection.js.twig (缩减为必要的代码)
<script type="text/javascript">
makeMultiselectDropdown('#{{ form.vars.name }}_markets', 'Select Markets' );
makeMultiselectDropdown('#{{ form.vars.name }}_products', 'Select Products' );
makeMultiselectDropdown('#{{ form.vars.name }}_channel1', 'Select Channel1');
</script>
这导致所有三个下拉菜单变成了一个多选,就像我想要的那样。对于第二个选择(upload_profile_yes),我有 uploadprofile_selection.js.twig 文件
<script type="text/javascript">
alert('#{{ upForm.vars.name }}_markets');
makeMultiselectDropdown('#{{ upForm.vars.name }}_markets', 'Select Markets' );
makeMultiselectDropdown('#{{ upForm.vars.name }}_products', 'Select Products' );
makeMultiselectDropdown('#{{ upForm.vars.name }}_channel1', 'Select Channel1' );
</script>
但是对于这种形式,它只是不呈现多选下拉列表。 表单是正确呈现的,因此下拉列表会显示正确的数据,但是用于使它们成为真实下拉列表的javascript不起作用。
javascript文件正在运行(我使用alert()函数对其进行了测试,并且正在运行..)
它的样子如下:
upload_profile_no 的下拉列表 没有为 upload_profile_yes 工作的下拉菜单
如您所见,这些值都是正确的。
更新
我还意识到表单类型没有完全正确呈现。 当取出form_row(upForm.markets)时,它在该页面上根本不会出现,即使它应该在页面的最底部显示为“未渲染”..