2017-10-10 1 views
0

verwenden Ich möchte mehr als 1 Informationen bei der Suche anzeigen, so dass ich select2 ajax & Vorlagen verwenden. Es benutzt json. Ich ändere die URL und ich mache Funktion auf meinem Controller. Aber ich habe ein Problem. Es kann nichts zeigen. Was ist das Problem? Dies ist mein Code: AnsichtWie widget kartik select2 mit ajax & templates in yii2

$formatJs = <<< 'JS' 
var formatProduct = function (product) { 
    if (product.loading) { 
    return product.text; 
    } 
var markup = 
    '<div class="row">' + 
     '<div class="col-sm-5">' + 
     '<b style="margin-left:5px">' + product.name + '</b>' + 
     '</div>' + 
     '<div class="col-sm-3"><i class="fa fa-code-fork"></i> ' + product.ean_no + '</div>' + 
     '<div class="col-sm-3"><i class="fa fa-star"></i> ' + product.desc + '</div>' + 
    '</div>'; 
    return '<div style="overflow:hidden;">' + markup + '</div>'; 
    }; 
    var formatProductSelection = function (product) { 
    return product.name || product.text; 
    } 
JS; 

// Register the formatting script 
$this->registerJs($formatJs, \yii\web\View::POS_HEAD); 

// script to parse the results into the format expected by Select2 
$resultsJs = <<< JS 
    function (data, params) { 
     params.page = params.page || 1; 
     return { 
      // Change `data.items` to `data.results`. 
      // `results` is the key that you have been selected on 
      // `actionJsonlist`. 
      results: data.results 
     }; 
    } 
JS; 

Select2

echo Select2::widget([ 
     'name' => 'kv-repo-template', 
     'value' => '14719648', 
     'initValueText' => 'kartik-v/yii2-widgets', 
     'options' => ['placeholder' => 'Search for a repo ...'], 
     'pluginOptions' => [ 
      'allowClear' => true, 
      'minimumInputLength' => 1, 
      'ajax' => [ 
       'url' => Url::to(['/bom/product/productlist']), 
       'dataType' => 'json', 
       'delay' => 250, 
       'data' => new JsExpression('function(params) { return {q:params.term, page: params.page}; }'), 
       'processResults' => new JsExpression($resultsJs), 
       'cache' => true 
      ], 
      'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
      'templateResult' => new JsExpression('formatProduct'), 
      'templateSelection' => new JsExpression('formatProductSelection'), 
     ], 
    ]); 

Controller

public function actionProductlist($search = NULL, $code = NULL) 
{ 
    header('Content-type: application/json'); 
    $clean['more'] = false; 

    $query = new \yii\db\Query; 
    if(!is_Null($search)) 
    { 
     $mainQuery = $query->select('code, name, description, volume') 
          ->from('product'); 
     $command = $mainQuery->createCommand(); 
     $rows = $command->queryAll(); 
     $clean['results'] = array_values($rows); 
    } 
    else 
    { 
     if(!is_null($code)) 
     { 
      $clean['results'] = ['ean_no'=> $code, 'name' => Product::find($code)->nama, 
       'description' => Product::find($code)->description, 'volume' => Product::find($code)->volume]; 
     }else 
     { 
      $clean['results'] = ['ean_no' => 123, 'name' => 'None found', 'description' => 'None found', 'volume' => 'None found']; 
     } 
    } 
    echo \yii\helpers\Json::encode($clean); 
    exit(); 
} 

auf mozilla, wenn ich das Element Konsole inspizieren öffnen. gibt es eine Fehlermeldung wie folgt aus:

Typeerror: data.slice ist keine Funktion S2

Antwort

0

Try

'processResults' => new JsExpression($resultsJs), 
+0

noch in der Dropdown-Liste erscheint nicht entfernen –

+0

Ich denke, Select2-ID und Text erwartet Werte, also im Array müssen Sie ean_no Schlüssel zu ID ändern, Name zu Text – naduvko

+0

Was meinst du? sollte es nicht wichtig sein, wenn ohne ID? –

Verwandte Themen