GridView过滤器中的kartik \ Select2显示id而不是name

时间:2018-02-22 15:28:11

标签: javascript yii2 jquery-select2 kartik-v

我有一个Gridview,在下拉列表中我决定使用ajax实现select2下拉列表,页面加载时间过长,实现ajax后性能提升了很多,并且ajax搜索工作正常。 我的问题是当我从列表中选择一个页面重新加载并从我选择的id获取数据时,但在过滤器标题中,它显示了id而不是显示名称。 下面的代码仅供用户使用,但组织和消息的列也有相同的问题。

Filters ID's instead of name

查看/ index.php的

 $formatJs = <<< 'JS'
 var id_user = function (id_user) {
 return id_user.id ? id_user.id : id_user.text;  
 }
 JS;
 $this->registerJs($formatJs, \yii\web\View::POS_HEAD);
 ... 
  [
        'attribute' => 'id_user',
        'label' => Yii::t("app", "User"),
        'value' => function ($model) {
            return Notification::findOne($model->id)->idUser->name;
        },
        'filterType' => GridView::FILTER_SELECT2,
        'filterWidgetOptions' => ['options' => ['placeholder' => ''], 'pluginOptions' => ['allowClear' => true, 'minimumInputLength' => 3,
            'ajax' => [
                'url' => Url::to(['user-list']),
                'dataType' => 'json',
                'data' => new JsExpression('function(params){return{q:params.term};}'),
                'cache' => true,
            ],
            'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
            'templateSelection' => new JsExpression('id_user'),]
        ],
    ],

Controller.php这样

public function actionUserList($q = null, $id = null) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    $out = ['results' => ['id' => '', 'text' => '']];
    if (!is_null($q)) {
        $query = new Query;
        $query->select('id, name AS text')->from('tbl_user')->where(['like', 'name', $q])->limit(10);
        $command = $query->createCommand();
        $data = $command->queryAll();
        $out['results'] = array_values($data);
    } elseif ($id > 0) {
        $out['results'] = ['id' => $id, 'text' => User::find($id)->name];
    }
    return $out;
}

1 个答案:

答案 0 :(得分:0)

我知道答案还很晚,但是我自己遇到了这样的问题。也许该解决方案对某人有用。

为了显示值而不是标识符,您需要使用apiVersion: extensions/v1beta1 kind: Ingress metadata: # remove comment if tls is activated # annotations: # nginx.ingress.kubernetes.io/backend-protocol: HTTPS # nginx.ingress.kubernetes.io/secure-backends: "true" name: elastic-ingress spec: rules: - host: elasticsearch.foo.bar http: paths: - backend: serviceName: servicePort: 9200 path: / tls: - hosts: - elasticsearch.foo.bar secretName: tls

首先,我们需要从选定的标识符中获取用户。

initValueText

由于某种原因,我的过滤器格式略有不同,可能是版本不同或两个选项都起作用。我将从我的代码中举一个例子:

$filteredUserId = ArrayHelper::getValue(Yii::$app->getRequest()->getQueryParam('UserSearch'), 'user_id');
$filteredUser = $filteredUserId ? User::findOne($filteredUserId) : null;