2015-07-15 6 views
10

मैंने पहले से ही यह कोशिश की है: yii2 dependent autocomplete widgetYii2 DropDownList Onchange परिवर्तन स्वत: पूर्ण विजेट "स्रोत" विशेषता?

लेकिन मुझे नहीं पता कि यह क्यों काम नहीं कर रहा है। यहाँ स्क्रिप्ट के साथ मेरी एचटीएमएल:

<?= $form->field($model, 'lbt_holder_type')->dropDownList(['prompt' => '--- Select Holder Type ---', 'S' => 'Student', 'E' => 'Employee'], 
        ['onChange' => 'JS: var value = (this.value); 
           if(value == "S"){$(#libraryborrowtransaction-name).autoComplete({source: '. $s_data.');} 
           if(value == "E"){$(#libraryborrowtransaction-name).autoComplete({source: '. $e_data.');} 

        '])?> 

स्वत: पूर्ण:

<?= $form->field($model, 'name')->widget(\yii\jui\AutoComplete::classname(), [ 
       'options' => ['class' => 'form-control', 'placeholder' => 'Enter Name/ID'], 
       'clientOptions' => [ 
        'source' => $s_data, 
        'autoFill' => true, 
        'minLength' => '1', 
        'select' => new yii\web\JsExpression("function(event, ui) { 
         $('#libraryborrowtransaction-lbt_holder_id').val(ui.item.id); 
        }") 
       ], 
      ])?> 

मैं dropdownlist मूल्य के अनुसार स्वत: पूर्ण स्रोत को बदलना चाहते हैं, अगर एस तो $ s_data बाकी लोड $ e_data लोड। इसके साथ कोई मदद। धन्यवाद।

यहाँ मेरी डेटा,

$s_data = (new \yii\db\Query()) 
->select(["CONCAT(stu_unique_id,' - ',stu_first_name,' ',stu_last_name) as value","CONCAT(stu_unique_id,' - ',stu_first_name,' ',stu_last_name) as label","s_info.stu_info_stu_master_id as id"]) 
->from('stu_master stu') 
->join('join','stu_info s_info','s_info.stu_info_id = stu_master_stu_info_id') 
->where('is_status = 0') 
->all(); 

और,

$e_data = (new \yii\db\Query()) 
    ->select(["CONCAT(emp_unique_id, ' - ',emp_first_name,' ',emp_last_name) as value","info.emp_info_emp_master_id as id"]) 
    ->from('emp_master emp') 
    ->join('join', 'emp_info info', 'info.emp_info_id = emp_info_emp_master_id') 
    ->where('is_status = 0')   
    ->all(); 
+0

कोई भी आज मेरी मदद करने जा रहा है ??? –

उत्तर

8

ठीक है, मैं अपने परीक्षण yii2 पर्यावरण के लिए अपने कोड के टुकड़े जोड़ दिया है क्या गलत है परीक्षण करने के लिए है। तो वहाँ अपने कोड के साथ कुछ समस्याएं भी हैं: मैंने देखा

सभी की
[ 
    'onChange' => 
     'JS: var value = (this.value); 

     if(value == "S"){$(#libraryborrowtransaction-name). 
      autoComplete({source: '. $s_data.');} 

     if(value == "E"){$(#libraryborrowtransaction-name). 
      autoComplete({source: '. $e_data.');} 

'] 

सबसे पहले क्या Yii अपने "S" और "ई" के लिए कुछ उद्धरण चिह्न प्रतीकों के लिए भागने लागू होते हैं, और ब्राउज़र में अपने कोड &quot;S&quot; तरह दिखता है।

अगला, जुई स्वत: पूर्ण प्लगइन नाम "autocomplete" नाम के साथ jquery प्रोटोटाइप में एक संपत्ति जोड़ता है लेकिन "autoComplete" नहीं। जैसा कि जेएस केस संवेदनशील है, यह दो नाम इसके लिए अलग दिखते हैं।

तो मेरी समाधान के रूप में नीचे दिखाया गया है, onchange संपत्ति से सभी js स्थानांतरित करने के लिए js स्क्रिप्ट अलग करने के लिए (परीक्षण प्रयोजनों के लिए आप इसे अपने प्रश्न में प्रदान की कोड का उपयोग अपने Yii दृश्य फ़ाइल में सही जोड़ सकते हैं)

था
<script> 
    function holderTypeChangeHandler(ev) { 
     var value = (this.value); 
     if(value == 'S'){ 
      $('#libraryborrowtransaction-name').autocomplete({source: ' . $s_data . '}); 
     } 
     if(value == 'E'){ 
      $('#libraryborrowtransaction-name').autocomplete({source: ' . $e_data . '}); 
     } 
    } 
    window.onload = function(){ 
     $('#libraryborrowtransaction-lbt_holder_type').on('change', holderTypeChangeHandler); 

    }; 
</script> 

और इस तरह अपने DropDownList के onchange संपत्ति के लिए इस नए ईवेंट हैंडलर का पेस्ट नाम:

['onChange' => 'holderTypeChangeHandler'] 

अद्यतन: -------------------- -

के बाद से Yii2 JQuery यूआई स्वत: पूर्ण विजेट और Yii2 स्वत: पूर्ण clientOptions के आधार पर स्वत: पूर्ण settings for JUI autocomplete widget हैं तो हम source option के विवरण के लिए JUI एपीआई डॉक्स देख सकते हैं। जैसा कि आप देख सकते हैं, यह विकल्प एक स्ट्रिंग हो सकता है (इस मामले में यह JSON डेटा के लिए यूआरआई के रूप में उपयोग किया जाता है), एक फ़ंक्शन या डेटा की जेएस सरणी या ऑब्जेक्ट्स जेएस सरणी।

अपने प्रश्न में आप \yii\db\Query का उपयोग method all() की सहायता से डीबी से कुछ डेटा लाने के लिए कर रहे हैं, जो डेटा की एक सरणी देता है। तो आखिर में आपको ऑब्जेक्ट्स के जेएस सरणी में \yii\db\Query->all के साथ प्राप्त डेटा की सरणी को कन्वर्ट करने की आवश्यकता है। यह करने के लिए, php json functions का उपयोग खासकर अपने मामले के लिए आप json_encode() समारोह उपयोग करने की आवश्यकता: अपने $e_data के लिए

// Let's say this is a result of your query to db with use of `\yii\db\Query->...->all();` 
$some_array = [                                                                                                                 
    [                                      
     "value" => "Val 1",                                 
     "label" => "Label 1", 
     "id" => 1 
    ], 
    [ 
     "value" => "Val 2", 
     "label" => "Label 2", 
     "id" => 2 
    ] 
] 

// Just convert it to json string 
$s_data = json_encode($some_array); 
... 
// When concat this json string as a value of source attribute for Yii Autocomplete 
$('#libraryborrowtransaction-name').autocomplete({source: <?= $s_data ?> }); 

एक ही है। बस ध्यान दें, अपना डेटा PHP के साथ डीबी से प्राप्त करें, लेकिन इसे जेएस के साथ प्रयोग करें, इसलिए php सरणी को स्ट्रिंग प्रस्तुति जेएस सरणी में परिवर्तित करने की आवश्यकता है, और यह रूपांतरण आप json_encode के साथ कर सकते हैं।

+0

मुझे अपने ऑटो पूर्ण "स्रोत" को क्या पास करना चाहिए। मुझे जेसन पार्स त्रुटि मिल रही है। –

+0

जब मैं एस या ई के मान को बदलता हूं, तो यह त्रुटि से ऊपर हो रहा है। –

+0

मेरा कंसोल यह दिखा रहा है "वापसी JSON.parse (डेटा +" ");" पृष्ठ नहीं मिला। मुझे लगता है कि यूआरएल बनाया गया था चेंज इवेंट काम नहीं कर रहा है। –

संबंधित मुद्दे