我在配置中的“取决于”功能遇到困难。

通常,添加 <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>
许可以下: CC-BY-SA归因
scroll top