2016-02-22 14 views
7

[OK]を、私はここに狂っているように感じる。私はselect2 jqueryプラグイン(バージョン4)を使用していて、ajax経由でデータを取得しています。だからあなたは名前を入力することができ、それはその連絡先情報を返します。しかし、私はまた、連絡先がどの組織であるかを返すことも望みます。ここで Select2 - ajaxコール経由で追加データを返信する

は私SELECT2の初期化です:

$('#contact_id').select2({ 
    ajax: { 
     url: 'example.com/contacts/select', 
     dataType: 'json', 
     delay: 250, 
     data: function (params) { 
      return { 
       q: params.term, 
       page: params.page 
      }; 
     }, 
     processResults: function (data) { 
      return { 
       results: data 
      }; 
     }, 
     cache: true 
    }, 
    minimumInputLength: 3, 
    maximumSelectionLength: 1 
}); 

そして、ここで私は戻っていたデータ(laravelフレームワーク)である:

foreach($contacts as $con) { 
    $results[] = [ 
     'id' => $con->contact_id, 
     'text' => $con->full_name, 
     'org' => [ 
      'org_id'  => $con->organization_id, 
      'org_name'  => $con->org_name 
     ] 
    ]; 
} 

return response()->json($results); 

がそうではない '組織は' 末端に結合されることになって作成されたオプションかselect2でselect要素を選択しますか?だから私は$('#contact_id').select2().find(':selected').data('data').orgまたは$('#contact_id').select2().data('data').orgのような何かをすることができますか?私はこれが最後の週に働い確認し、今では完全にその組織の特性を無視しています誓う

<select> 
    <option value="43" data-org="{org_id:377, org_name:'Galactic Empire'}">Darth Vader</option> 
</select> 

理想的に、これは次のようになります。私は、返されるjsonデータに適切なorg_idとorg_nameを持つorgが含まれていることを確認しました。

IDとテキストプロパティは、各オブジェクトに必要とされており、これらは、Selectセレクトは、内部データオブジェクトのために使用するプロパティです:私はdocumentationの、オンラインのみこのスニペットを何かを掘ることができていません。データオブジェクトと共に渡された追加のパラメータは、Select2が公開するデータオブジェクトに含まれます。

だから誰でも私を助けることができますか?私はすでにこれに数時間を費やしてしまった。

EDIT:私はどんな反応をもらっていないので、私の現在の計画は、私は私のコードでは、後に参照する非表示の入力フィールドまたはJSONブロックを起動するprocessResultsコールバックを使用することです。状況を考えれば、これはハックな解決策だと思うが、それ以外の方法がなければ、それは私がやることだ。私はむしろその組織を得るために別のアヤックスコールを行うよりもそうしたいと思う。私がそれを実装するのを手伝ったら、私は解決策を投稿します。

追加データ(V4.0)を含む:データの読み込み

processResults: function (data) { 
    data = data.map(function (item) { 
     return { 
      id: item.id_field, 
      text: item.text_field, 
      otherfield: item.otherfield 
     }; 
    }); 
    return { results: data }; 
} 

+0

こんにちは、私は今同じ問題に直面しています。理想的には、データ属性を使用して追加のデータ(IDとテキストだけでなく)を渡す必要があります。あなたは問題を解決しましたか? – slick

+0

これには実際の解決策がありますか? –

+0

私のソリューションを追加しました。 –

答えて

0

私が間違っていたことを覚えていないかもしれませんが、processResults(data)では、データに完全な応答が含まれています。下記の実装では、アイテムが選択されたときにこの情報にアクセスします:

$('#select2-box').select2({ 
    placeholder: 'Search Existing Contacts', 
    ajax: { 
     url: '/contacts/typeahead', 
     dataType: 'json', 
     delay: 250, 
     data: function(params){ 
      return { 
       q: params.term, 
       type: '', 
       suggestions: 1 
      }; 
     }, 
     processResults: function(data, params){ 
      //Send the data back 
      return { 
       results: data 
      }; 
     } 
    }, 
    minimumInputLength: 2 
}).on('select2:select', function(event) { 
    // This is how I got ahold of the data 
    var contact = event.params.data; 

    // contact.suggestions ... 
    // contact.organization_id ... 
}); 



// Data I was returning 
[ 
    { 
     "id":36167, // ID USED IN SELECT2 
     "avatar":null, 
     "organization_id":28037, 
     "text":"John Cena - WWE", // TEXT SHOWN IN SELECT2 
     "suggestions":[ 
      { 
       "id":28037, 
       "text":"WWE", 
       "avatar":null 
      }, 
      { 
       "id":21509, 
       "text":"Kurt Angle", 
       "avatar":null 
      }, 
      { 
       "id":126, 
       "text":"Mark Calaway", 
       "avatar":null 
      }, 
      { 
       "id":129, 
       "text":"Ricky Steamboat", 
       "avatar":null 
      }, 
      { 
       "id":131, 
       "text":"Brock Lesnar", 
       "avatar":null 
      } 
     ] 
    } 
] 
2

(低評判)今のところコメントすることはできません...そう...ツルツルに答える

var data=$('#contact_id').select2('data')[0]; 
console.log(data.otherfield); 
+0

ありがとう、上記のあなたのソリューションは私の問題を解決し、私の時間を節約 – widjajayd