2017-08-13 89 views
0

重用表單域我有一個字段是一個選擇二小部件領域,它通常以多種形式使用,但複製粘貼相同的代碼一段時間變得非常煩人了。因此,我決定最好爲這個領域創建一個小部件。Yii2:通過小部件

領域是如下

 <?= $form->field($model, 'contact_id')->widget(Select2::className(), [ 
     'initValueText' => empty($model->contact_id) ? '' : $model->contact->contact_id . ' ' . $model->contact->fullname, 
     'options' => [ 
      'class' => 'input-sm', 
      'id' => 'contact_id', 
      'placeholder' => '-- Search --', 
      'disabled' => $disabled, 
      'onchange' => new JsExpression("get_contact_info($(this).val())"), 
     ], 
     'pluginOptions' => [ 
      'allowClear' => true, 
      'language' => [ 
       'errorLoading' => new JsExpression("function() { return 'Waiting for results...'; }"), 
      ], 
      'ajax' => [ 
       'url' => $fetch_url, 
       'dataType' => 'json', 
       'data' => new JsExpression('function(params) { return {q:params.term}; }'), 
       'results' => new JsExpression('function(data,page) { return {results:data.results.text}; }'), 
      ], 
      'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
      'templateResult' => new JsExpression('function(contact) { return contact.text; }'), 
      'templateSelection' => new JsExpression('function (contact) { return contact.text; }'), 
     ], 
    ]); ?> 

此字段利用Ajax的擷取,並且必須允許在用於創建和更新的形式。

任何人都可以請點我到正確的方向。

+0

這是正確的,創建窗口小部件並根據需要進行配置。 – SiZE

回答

0

我看到了兩個解決方案: 一)創建控件 - 使用添加了其他設置 B以下的工作,但靈活)創建單獨的視圖,並使其 - 速度更快,但是沒有那麼靈活