【问题标题】:Yii2: show init text for kartik/select2 on loadYii2:在加载时显示 kartik/select2 的初始化文本
【发布时间】:2018-02-27 08:24:49
【问题描述】:

我正在使用KARTIK-Select2-AJAX

一切正常,但我找到了标题的 id,而不是标题的文本。

保存后如何在 $_POST 中获取标题?在选择下拉列表项后,我通过其他 ajax 请求将其保存在 db 中。我认为问题出在下面。

   'ajax' => [
        'url' => $url,
        'dataType' => 'json',
        'data' => new JsExpression('function(params) {return{q:params.term}; }')
    ],

    'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),

    'templateResult' => new JsExpression('function(city) { return city.text; }'),

    'templateSelection' => new JsExpression('function (city) { return city.text; }'),

【问题讨论】:

  • 您需要显示所使用的$url 操作的代码,以了解生成什么响应以及如何生成。
  • 控制器的代码和 $url 与 kartik 演示中的相同,我得到了搜索结果,如 item1、item2 ......但保存后我没有得到文本。相反,我得到了 item1 或 item2 的 id,例如上图。
  • 好的,所以您的意思是在保存后,当您尝试在页面加载时进行编辑时,它会显示 id 而不是所选city 的文本,以及您使用@的输入987654328@它的名字是city我说的对吗?
  • 我更新了答案,希望对您有所帮助。
  • 嘿@Anton 如果它帮助您解决问题,请选择答案

标签: javascript php yii2 jquery-select2 yii2-basic-app


【解决方案1】:

我假设您使用dropdown 作为cities 从您使用的选项之一看到,所以我将在示例中的模型参考中使用名称city_id

您需要使用initValueText 选项来显示保存的值text 而不是id

在您开始 Select2 之前,您应该在视图顶部添加以下语句,或者将其添加到 controller/action 并将值传递给视图。我将通过在视图顶部添加来演示。

// Get the initial city description
$cityName = $model->city_id == '' ? '' : City::findOne($model->city_id)->name;

在上面的行中,如果在模型中使用名称 city 定义,您也可以使用 relation 而不是 City::findOne($model->city_id)->name,如 $model->city->name

然后将选项 initValueText 添加到您的 Select2 选项中。

'initValueText'=>$cityName
'ajax' => [
        'url' => $url,
        'dataType' => 'json',
        'data' => new JsExpression('function(params) {return{q:params.term}; }')
    ],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(city) { return city.text; }'),
'templateSelection' => new JsExpression('function (city) { return city.text; }'),

编辑

您希望选项仅包含文本而不包含 id,男士 <option value="City Name">City Name</option>,为此您必须更新来自 url 的回复,正如我之前在第一条评论中询问您的那样,在您的问题下,您必须添加准确的代码才能获得准确的更新。

我假设您在ajax 选项中使用的$url 将命中和动作名称/citysearch,并且模型名称是City,您必须在其中搜索城市,更新以下动作相应的代码。我已经对其进行了测试并且可以正常工作。

public function actionCitysearch($q = null, $id = null) {
        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

        $out = ['results' => ['id' => '', 'text' => '']];

        if (!is_null($q)) {
            $data = City::find()
                    ->select(new \yii\db\Expression('[[name]] as id,[[name]] as text'))
                    ->where(['like', 'name', $q])
                    ->limit(20)
                    ->asArray()
                    ->all();
            $out['results'] = array_values($data);
        } elseif ($id > 0) {
            $city=City::find($id);
            $out['results'] = ['id' => $city->name, 'text' => $city->name];
        }
        return $out;
}

【讨论】:

  • 我为没有快速反馈而道歉;)是的,它适用于这种基本情况,但我的意思是,如何在 $_POST 中像 ['text1'=>'text1 '] 和基本示例 ['1'=>'text1'] 不同。像你写的那样获取这个文本值没有问题),但在某些情况下可能需要获取 而不是 可能可能在 js 上做,但我什至没有找到基本文档,它如何扩展或覆盖......
  • 是的!这就是你想要的。请你选择答案。 @安东
  • 我假设你说我会选择什么可能会保留在这里以及删除什么。在“编辑”下面写的所有内容都是正确的并接近我。
  • 不应删除最初回答的文本,因为它是最初假设的答案的一部分,并且缺少的部分已添加为 EDIT 并提到了据了解,在您的具体情况下, EDIT 部分有效,如果有人不希望 name=>value 对都作为文本,他们可以使用答案的第一部分,这在逻辑上无论如何都没有错误,并且仍然可以帮助其他人。所以可以将其标记为正确答案:) 祝你有美好的一天@Anton See HERE
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2018-09-01
  • 2023-04-01
相关资源
最近更新 更多