【问题标题】:Show Select2 option as selected将 Select2 选项显示为已选择
【发布时间】:2018-07-11 17:35:06
【问题描述】:
 <?=
$form->field($model, 'contributors')->widget(Select2::classname(), [
    'initValueText' => '',
    'options' => ['placeholder' => 'Search for a Contributor ...'],
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 3,
        'ajax' => [
            'url' => \yii\helpers\Url::to(['data2']),
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }')
        ],
        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
        'templateResult' => new JsExpression('function(contributor_id) { return contributor_id.text; }'),
        'templateSelection' => new JsExpression('function (contributor_id) { return contributor_id.text; }'),
    ],
])->label('Contributors');
?>

如何显示选定的值,现在它显示 id 为选定的。 请任何人帮助我。

【问题讨论】:

    标签: yii2 jquery-select2


    【解决方案1】:

    更新

    抱歉,回复晚了没有注意到您需要为 select2 设置初始文本,因为您正在使用 ajax 选项,因此您应该使用选项initValueText。根据文档

    initValueText : 在 Select2 小部件中显示的文本 初始值。这在您使用 带有 ajax 加载数据的小部件和/或您没有提供数据。 查看 ajax 使用部分以获取示例。

    所以你需要像下面这样使用它,在你的控制器动作中添加这一行并将它传递给视图,或者在 select2 之前添加它到视图中

    $contributorName = empty($model->contributors) ? '' : Contributors::findOne($model->contributors)->name;
    
    <?=
    $form->field($model, 'contributors')->widget(Select2::classname(), [
        'initValueText' => $contributorName, // set the initial display text
        'options' => ['placeholder' => 'Search for a Contributor ...'],
         'data'=>yii\helpers\ArrayHelper::map(Contributors::find()->all(),'id','name')
        'pluginOptions' => [
            'allowClear' => true,
            'minimumInputLength' => 3,
            'ajax' => [
                'url' => \yii\helpers\Url::to(['data2']),
                'dataType' => 'json',
                'data' => new JsExpression('function(params) { return {q:params.term}; }')
            ],
            'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
            'templateResult' => new JsExpression('function(contributor_id) { return contributor_id.text; }'),
            'templateSelection' => new JsExpression('function (contributor_id) { return contributor_id.text; }'),
        ],
    ])->label('Contributors');
    ?>
    

    您需要为将显示所选值的值集提供数据选项您希望显示text 而不是id,请以数组形式提供data 选项与key=&gt;value 对。

    查看您的代码,您希望在数据库表中针对id 显示贡献者name,因此您应该使用ArrayHelper:map() 以及查询您的Contributors 模型,请参见下文并更新您的字段名称为@ 987654335@ArrayHelper::map()内的模型/表

    <?=
    $form->field($model, 'contributors')->widget(Select2::classname(), [
        'options' => ['placeholder' => 'Search for a Contributor ...'],
         'data'=>yii\helpers\ArrayHelper::map(Contributors::find()->all(),'id','name')
        'pluginOptions' => [
            'allowClear' => true,
            'minimumInputLength' => 3,
            'ajax' => [
                'url' => \yii\helpers\Url::to(['data2']),
                'dataType' => 'json',
                'data' => new JsExpression('function(params) { return {q:params.term}; }')
            ],
            'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
            'templateResult' => new JsExpression('function(contributor_id) { return contributor_id.text; }'),
            'templateSelection' => new JsExpression('function (contributor_id) { return contributor_id.text; }'),
        ],
    ])->label('Contributors');
    ?>
    

    【讨论】:

    • 感谢您的宝贵回复,但为什么我在使用 ajax 作为贡献者时使用数据并在用户输入时附加到其中。顺便说一句,我尝试过这个解决方案但没有用。
    • 它在您的情况下不起作用,因为您在 pluginOptions 内提供了 data,它覆盖了在小部件级别设置的 data @Nageen
    • 你也应该使用processResults
    • 抱歉@Nageen 没有注意到,更新了我的回答希望对您有帮助
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2017-06-04
    • 2019-05-22
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多