如何使用CakePHP为AJAX驱动的Select2框设置初始选择?

时间:2017-03-29 08:58:39

标签: php jquery cakephp select2 cakephp-2.x

我正在使用select2让用户从ajax列表中选择内容。 添加到db它工作得很好,但我想编辑东西。所以我仍然可以从我的select2中选择东西,但是用户应该看看select2的当前值是什么。

我尝试使用InitSelect做一些事情,但即使我刚刚从php传递了数据,它也无法正常工作。

这是我的Select2:

    $(".personid").select2({
    ajax: {
        type: "post",
        url: '/' + APP_PATH + '/Projects/find_person.json',
        datatype: 'json',
        quietMillis: '100',
        data: function (term, page) {
            return {
                q: term.toUpperCase(), // wprowadzony ciag znakow - zawsze na uppercase
                page_limit: 10,
            };
        },
        results: function (data, page) {
            var dane = {results: []};
            $.each(data['data'], function (i, item) {
                dane.results.push({
                    id: item['Person']['id'],
                    text: item['Person']['displayName']
                });
            });
            return dane;
        }
    }

});

这是我的蛋糕形式输入:

echo $this->Form->input('person_id', array(
    'type' => 'text',
    'value' => $projectcontact['Person']['id'],
    'Placeholder' => 'Wybierz osobę',
    'empty' => 'Wybierz osobę ',
    'class' => 'form-control personid',
    'label' => array(
        'class' => 'col-md-4 control-label',
        'text' => 'Osoba'
    )
));

任何人都可以帮忙让Select.js在数据库中显示当前的Persona名称数据吗?

1 个答案:

答案 0 :(得分:1)

使用Select2 4.x

使用Select2 4.x,您不应再使用文本input元素,而应使用select元素。从文档引用:

  

将Select2与远程数据一起使用时,select所需的HTML与任何其他Select2相同。如果您需要提供默认选择,则只需为每个包含应显示的值和文本的选项添加option

<select class="js-data-example-ajax">
    <option value="3620194" selected="selected">select2/select2</option>
</select>

<强> https://select2.github.io/examples.html#data-ajax

因此,如上所述,使用单个选定的select元素创建正确的option输入,其内容如下:

echo $this->Form->input('person_id', array(
    'type' => 'select',
    'options' => array(
        $projectcontact['Person']['id'] => $projectcontact['Person']['displayName']
    ),
    'selected' => $projectcontact['Person']['id'],
    'class' => 'form-control personid',
    'label' => array(
        'class' => 'col-md-4 control-label',
        'text' => 'Osoba'
    )
));

此外,您必须确保根据可能提交的$projectcontact值向该人填充person_id,否则在提交后呈现表单时,所选值将不会保留。

通常在创建select元素时,您将使用完整的选项列表,以便表单帮助程序可以根据提交的值自动选择适当的选项。如果没有这样的列表,您将不得不阅读并提供特定的人员。

这是一些演示原则的虚拟代码:

$personId = $defaultPersonId;
if($this->request->is(array('post', 'put'))) {
    $personId = $this->request->data('ModelName.person_id');
    // ...
}

$projectcontact = $this->Person->findById($personId);
$this->set('projectcontact', $projectcontact);

另见