以下代码将根据预期使用AJAX请求向我提供所有记录。不幸的是,我无法将一条选定的记录变成表格。我可以选择它们,而不是把它们拿走。我假设templateResult
或templateSelection
中存在一些错误。
改述问题:不接受它们意味着,我无法采用单个记录显示为表格。它就像狗的食物,不能被狗吃掉,'因为手会一次又一次地移开......希望这有助于理解我的问题。 P.S::id_ba_xml_gelernter_beruf_1
是模型的属性
以下是视图的代码:
$url = \yii\helpers\Url::to ( [ 'berufe' ] );
?><?=
$form->field ( $model , 'id_ba_xml_gelernter_beruf_1' , [ 'addon' => [
'prepend' => [ 'content' => 'gelernter Beruf 1' ] ] ] )->widget ( \kartik\widgets\Select2::classname () , [
'options' => [ 'placeholder' => 'Berufe suchen ...' ] ,
'pluginOptions' => [
'allowClear' => true ,
'minimumInputLength' => 3 ,
'language' => [
'errorLoading' => new JsExpression ( "function () { return 'Waiting for results...'; }" ) ,
] ,
'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(berufe) { return berufe.text; }' ) ,
'templateSelection' => new JsExpression ( 'function (berufe) { return berufe.text; }' ) ,
] ,
] )->label ( false );
这是控制器代码,工作得很好:
public function actionBerufe( $q = null , $id = null ) {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$out = [ 'results' => [ 'id' => '' , 'text' => '' ] ];
if ( !is_null ( $q ) ) {
$query = new \yii\db\Query();
$query->select ( 'ID, Bezeichnung_neutral_kurz AS text' )
->from ( 'yii2_ba.ba_berufe' )
->where ( [ 'like' , 'Bezeichnung_neutral_kurz' , $q ] )
->limit ( 20 );
$command = $query->createCommand ();
$data = $command->queryAll ();
$out['results'] = array_values ( $data );
} elseif ( $id > 0 ) {
$out['results'] = [ 'id' => $id , 'text' => \common\modules\basis\models\BaBerufe::find ( $id )->Bezeichnung_neutral_kurz ];
}
return $out;
}
改述问题:
'templateResult' => new JsExpression ( 'function (berufe) { return console.log(berufe); berufe.text; }' ) ,
会给我这样的id和属性:
Object { ID: "72", text: "\"Absatzfachkraft\"" }
Object { ID: "287", text: "\"Akustikfacharbeiter/in\"" }
但
'templateSelection' => new JsExpression ( 'function (berufe) { return console.log(berufe); berufe.text; }' ) ,
会给我以下输出:
Object { id: "", text: "Berufe suchen ..." }
Object { id: "", text: "Berufe suchen ..." }
希望这有助于nicolascolman解决问题...
答案 0 :(得分:1)
id_ba_xml_gelernter_beruf_1是一个对象。试试这个:
'templateSelection' => new JsExpression ( 'function (id_ba_xml_gelernter_beruf_1) { return console.log(id_ba_xml_gelernter_beruf_1); id_ba_xml_gelernter_beruf_1.text; }' ) ,
您将在控制台中看到一个具有ID和文本属性的对象。 然后,用您的代码替换console.log(...)。