2016-02-22 13 views
7

के माध्यम से अतिरिक्त डेटा वापस पास करें ठीक है, मुझे लगता है कि मैं यहाँ पागल हो रहा हूं। मैं select2 jquery प्लगइन (संस्करण 4) का उपयोग कर रहा हूं, और AJAX के माध्यम से डेटा पुनर्प्राप्त कर रहा हूं। तो आप एक नाम टाइप कर सकते हैं, और यह उस संपर्क जानकारी को वापस कर देगा। लेकिन मैं भी वापस लौटना चाहता हूं कि कौन सा संगठन संपर्क करता है। 'Org' से जुड़ी होना चाहिएचयन 2 - AJAX कॉल

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 आरंभीकरण है:

$('#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 ढांचे) मैं लौट रहा हूँ डेटा है या तो निर्मित विकल्प या चयन 2 द्वारा तत्व का चयन करें? तो मैं $('#contact_id').select2().find(':selected').data('data').org या $('#contact_id').select2().data('data').org या ऐसा कुछ ऐसा कर सकता था?

Idealistically, इस विचार करेंगे की तरह:

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

मैं कसम खाता हूँ मैं इस बात की पुष्टि इस अंतिम सप्ताह में काम किया, लेकिन अब यह पूरी तरह से है कि ऑर्ग संपत्ति अनदेखी कर रहा है। मैंने पुष्टि की है कि जेसन डेटा लौटाया जा रहा है जिसमें उचित org_id और org_name के साथ संगठन शामिल है। मैं documentation का कुछ भी खुदाई करने के लिए ऑनलाइन, केवल इस टुकड़ा नहीं कर पाए हैं:

आईडी और पाठ गुण प्रत्येक वस्तु पर आवश्यक है, और इन गुणों कि Select2 आंतरिक डेटा वस्तुओं के लिए उपयोग करता है। डेटा ऑब्जेक्ट्स के साथ पास किए गए किसी भी अतिरिक्त पैरामीटर को डेटा ऑब्जेक्ट्स पर शामिल किया जाएगा जो Select2 का खुलासा करता है।

तो क्या कोई इस से मेरी सहायता कर सकता है? मैं इस पर कुछ घंटे पहले ही बर्बाद कर चुका हूं।

संपादित करें: जब से मैं किसी भी प्रतिक्रियाओं का नहीं मिला है, अपने वर्तमान प्लान को छिपा इनपुट फ़ील्ड या JSON ब्लॉक है कि मैं अपने कोड में बाद में दर्शाएंगे अंडे processResults कॉलबैक उपयोग करने के लिए है। मुझे लगता है कि यह स्थिति के बाद एक हैकी समाधान है, लेकिन अगर कोई दूसरा रास्ता नहीं है, तो मैं यही करूँगा। मैं संगठन प्राप्त करने के लिए एक और AJAX कॉल करने की बजाय। जब मैं इसे लागू करने के लिए चारों ओर मिलता हूं, तो मैं अपना समाधान पोस्ट करूंगा।

अतिरिक्त डेटा (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

हाय, मुझे अभी एक ही समस्या का सामना करना पड़ रहा है। मुझे आदर्श रूप से डेटा विशेषताओं का उपयोग करके अतिरिक्त डेटा (केवल आईडी और टेक्स्ट) पास करने की आवश्यकता नहीं है। क्या आपने समस्या हल की? – 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