与前端和后端模型的配置“取决于”
-
16-10-2019 - |
题
我在配置中的“取决于”功能遇到困难。
通常,添加 <depends>
对于某些配置选项,除非给定选项的值匹配,否则它是隐藏的。
例如:
<option_one>
<label>Option 1</label>
...
</option_one>
<option_two>
<label>Option 2</label>
...
<depends><option_one>1</option_one></depends>
</option_two
显然,我缺少一些字段,但是您明白了。 Option 2 only appears when Option 1 has the value '1'.
现在,我的问题是,当我尝试将其应用于以后端和前端模型的选项中,这取决于这不起作用:
<option_three>
...
<frontend_model>module/adminhtml_form_field_test</frontend_model>
<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
...
<depends><option_one>1</option_one></depends>
</option_three>
此选项不会在帐户中使用选项1,它总是可见的。
我是做错了什么,还是这是一个错误,还是“按设计工作”?
解决方案
如果您不使用 frontend_model
您的两个字段的HTML看起来像这样
<tr id="row_you_dependency_field_id">
<td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
<td class="value">
<select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
<tr id="row_your_dependent_field_id">
<td class="label">
<label for="your_dependent_field_id">Dependent Field</label>
</td>
<td class="value">
<select id="your_dependent_field_id" name="groups[general][fields][your_dependent_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
显示/隐藏依赖性字段的JavaScript将看起来像这样
new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});
并且显示/hide可以正常工作,因为HTML中都存在两个ID。
但是如果您使用 frontend_model
第二个字段的值由您的自定义块呈现 module/adminhtml_form_field_test
并且不包含因字段的ID,而JavaScript只是不知道该隐藏什么。
<tr id="row_you_dependency_field_id">
<td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
<td class="value">
<select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
<tr id="row_your_dependent_field_id">
<td class="label">
<label for="your_dependent_field_id">Dependent Field</label>
</td>
<td class="value">
...
//The output of your frontend_model
...
</td>
</tr>
因此,请转到_tohtml()方法 module/adminhtml_form_field_test
并将输出包装到 div
并为其指定ID
$fieldId = $this->getElement()->getId();
//your html
<div id="field id here">
//your frontend_model html
</div>