1

我又来了 我看到很多线程都在询问,如何根据其他 Dropdown 值创建具有内容的下拉菜单。这些逻辑也适用于我。但是现在我遇到了问题,下拉菜单的内容取决于其他 2 个下拉菜单的选择/值。依赖于一个 Dropdown 的代码如下所示:

$form = $crud->form;

$dd1 = $form->addField('dropdown', 'color', 'Color');
$dd1->setValueList(array('1' => 'white', '2' => 'black'));
$dd1->setEmptyText('all');

$dd2 = $form->addField('dropdown', 'size', 'Size');
$dd2->setValueList(array('1' => 'small', '2' => 'normal', '3' => 'large'));
$dd2->setModel('Size');

$dd3 = $form->getElement('packaging_id');

if ($_GET['color']) {
    $dd3->model->addCondition('color', $_GET['color']);
}

if ($_GET['size']) {
    $dd3->model->addCondition('size', $_GET['size']);
}

$dd1->js('change',
    $form->js()->atk4_form('reloadField', 'packaging_id',
        array($this->api->url(), 'color' => $dd1->js()->val())
    )
);

$dd2->js('change',
    $form->js()->atk4_form('reloadField', 'packaging_id',
        array($this->api->url(), 'size' => $dd2->js()->val())
    )
);

使用这些代码,下拉菜单dd3将填充与“大小”“颜色”选项匹配的包。但我需要,Dropdowndd3将填充与“大小”“颜色”选项匹配的包(例如“小”和“黑色”的包)。我认为,我需要一种方法来实现两个下拉菜单中的值dd1并将dd2其放入“reloadField”$_GET 参数中。然后从 $_GET 中提取它并应用 2 个条件。但是我还没有找到方法。谁能帮我?谢谢。

再见...

4

1 回答 1

2

描述

的参数atk4_form如下:

->atk4_form($js_method, $param1, $param2, $param3, ...)

结果 JS 方法$js_methodfromui.atk4_form.js将被这样调用:

->$js_method($param1, $param2, $param3, ...)

如果您使用的方法是$js_method = 'reloadField',那么您可以有以下参数:

reloadField: function(field_name, url, fn, notrigger, arg)

因此,您可以通过两种方式中的一种(或两种)传递 URL 参数 - 使用url参数或使用arg参数。


解决方案

因此,其中一种解决方案应该适合您。

传递 URL 中已包含的 URL 参数(使用 PHP,方法错误):

->atk4_form(
    'reloadField',
    'packaging_id',
    $this->api->url(null, array( /* base URL + additional parameters, formatted by PHP */
        'color' => $dd1->js()->val(),
        'size'  => $dd2->js()->val(),
    ))
)

或者使用JS动态生成URL(这是正确的方式):

->atk4_form(
    'reloadField',
    'packaging_id',
    $this->api->url(), /* base URL */
    null,
    null,
    array( /* additional parameters formatted by JS */
        'color' => $dd1->js()->val(),
        'size'  => $dd2->js()->val(),
   )
)
于 2014-05-19T09:05:53.803 回答