2012-03-08 6 views
5

मुझे पेजिनेशन और अजाक्स फॉर्म के बारे में समस्याएं हैं।वाईआई क्लिस्टव्यू -> पेजिनेशन और अजाक्सलिंक/AJAX बटन

यहाँ Controller के लिए मेरे कोड है:

$dataProvider = new CActiveDataProvider('User', array(
     'pagination'=>array(
       'pageSize'=>10, 
     ), 
)); 

$this->render('users',array(
    'dataProvider'=>$dataProvider, 
)); 

दृश्य के लिए -> उपयोगकर्ताओं:

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_user', 

);

प्रस्तुत करना _users के लिए:

echo CHtml::ajaxLink($text, $this->createUrl('admin/deleteuser',array('id'=>$data->iduser)), array('success'=>"js:function(html){ alert('remove') }"), array('confirm'=>_t('Are you sure you want to delete this user?'), 'class'=>'delete-icon','id'=>'x'.$viewid)); 

अगर मैं एक डेटाबेस है कि यह केवल दिखाएगा 10 में 15 पंक्तियों है और अगले 5. पहले 10 पंक्तियों के लिए एक पृष्ठांकन (ajaxUpdate = true) उत्पन्न होगा साथ कोई समस्या नहीं है AJAXLink क्योंकि क्लाइंटस्क्रिप्ट उत्पन्न हुआ था लेकिन समस्या तब होती है जब मैं अगले पृष्ठ पर जाता हूं, AJAXLink काम नहीं कर रहा है क्योंकि यह पेजिनेशन द्वारा उत्पन्न नहीं होता है।

कोई विचार? धन्यवाद

+2

आपको ** कोड देना होगा और केवल –

+0

उत्तरों की अपेक्षा करने के बजाय गलत क्या है, समझाएं ** आप क्या कह रहे हैं इसका विवरण कहां है? –

+1

क्षमा करें मैंने सोचा कि मैंने पहले से ही समस्या डाली है .. क्षमा करें फिर से – butching

उत्तर

0

पूरी तरह से सुनिश्चित नहीं है, लेकिन पिछले अनुभवों को देखते हुए मुझे लगता है कि समस्या सूचीदृश्य विजेट में ही है।

यदि विजेट का मालिक नियंत्रक है, तो यह आइटम दृश्य प्रस्तुत करने के लिए रेंडरपार्टियल का उपयोग करता है। रेंडरपार्टियल में, जैसा कि आप जानते हैं या नहीं जानते हैं, एक "प्रक्रिया आउटपुट" पैरामीटर जिसे अधिकांश AJAX जादू (डिफ़ॉल्ट रूप से इसके गलत) के लिए TRUE पर सेट करने की आवश्यकता है।

तो शायद आप सूचीदृश्य की एक कक्षा प्राप्त करने का प्रयास कर सकते हैं और "renderItems()" में एक प्रतिलिपि जोड़ सकते हैं। वहां आपको इसे बदलना होगा ताकि यह सही पैरामीटर के साथ रेंडरपार्टियल को कॉल कर सके।

+0

जब मैं अगले पृष्ठ पर क्लिक करता हूं और चूंकि यह अजाक्स है तो मैंने परिणाम को कंसोल (फायरबग) में देखा और मैंने देखा कि AJAXLink jscode उत्पन्न हुआ था लेकिन फिर भी यह काम नहीं कर रहा है मूल दस्तावेज – butching

+0

अधिकांश AJAX लिंक सामग्री को इवेंट आदि से जुड़ने के लिए कुछ "दस्तावेज़ तैयार" कोड की आवश्यकता होती है, यह है कि प्रक्रिया के साथ लौटाए गए परिणाम में नहीं जोड़ा जाता है .पुट == गलत। – Blizz

1

एक वैकल्पिक विधि, यह post in the yii forum देखें। तो अपने कोड इस तरह हो जाएगा:

echo CHtml::link($text, 
    $this->createUrl('admin/deleteuser',array('id'=>$data->iduser)), 
    array(// for htmlOptions 
     'onclick'=>' {'.CHtml::ajax(array(
      'beforeSend'=>'js:function(){if(confirm("Are you sure you want to delete?"))return true;else return false;}', 
      'success'=>"js:function(html){ alert('removed'); }")). 
     'return false;}',// returning false prevents the default navigation to another url on a new page 
    'class'=>'delete-icon', 
    'id'=>'x'.$viewid) 
); 

आपका पुष्टि jQuery के ajax समारोह के beforeSend कॉलबैक करने के लिए ले जाया जाता है। अगर हम beforeSend से वापस करते हैं, तो AJAX कॉल नहीं होता है।

एक और सुझाव है, आप get बजाय post चर, और भी उपयोग करना चाहिए आप, सूचकांक ध्यान में रखते हुए एक function को ajax कॉल स्थानांतरित कर सकते हैं, और सिर्फ सभी लिंक 'onclick घटना से कार्य करने के लिए कॉल शामिल हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

हाँ मैं बस इसे पढ़ता हूं और मुझे लगता है कि मेरे पास कोई अन्य विकल्प नहीं है इसलिए मैंने उस विचार से कुछ बनाया है .. बस अजाक्स अपडेट – butching

+0

ठीक पर कोड डालें..यह ऐसा करने का दूसरा तरीका है –

0

विजेट Clistview में, मैं afterAjaxUpdate

$jsfunction = <<< EOS 
js:function(){ 
    $('.delete-icon').live('click',function(){ 
     if(confirm('Are you sure you want to delete?')) 
     { 
     deleteUrl = $(this).attr('data-href'); 
     jQuery.ajax({'success':function(html){ },'url':deleteUrl,'cache':false}); 
     return false;  
     } 
     else 
     return false; 
    }); 
    } 
EOS; 

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'id'=>'subscriptionDiv', 
    'itemView'=>'_subscription', 
    'afterAjaxUpdate'=>$jsfunction, 
    'viewData'=>array('is_user'=>$is_user,'all'=>$all), 
    'htmlOptions'=>($dataProvider->getData()) ? array('class'=>'table') : array('class'=>'table center'), 
) 
); 

जोड़ा गया है और _user में सिर्फ विशेषता डेटा-href

<?php echo CHtml::ajaxLink($text, $this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription)), 
      array('success'=>"js:function(html){ $('#tr{$viewid}').remove(); }"), 
      array('confirm'=>_t('Are you sure you want to unsubscribe?'), 
       'class'=>'delete-icon', 
       'id'=>'x'.$viewid, 
       'data-href'=>$this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription))     
       )); ?> 
0

कोशिश

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_user', 
    'enablePagination' => true, 
); 

अगर यह समाधान नहीं करता है जोड़ा , डेटा प्रदाता विकल्पों में रिकॉर्ड्स की कुल संख्या को शामिल करने का प्रयास करें -

'itemCount' => ....., 
संबंधित मुद्दे