zui .widgets. clistview with CStarRating不会在分页时重新加载jquery


zii.widgets.CListView with CStarRating doesn't reload stars jquery on pagination

厚底!

我有一个Yii网页我列出了一些我加载的产品,像这样:

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

在_listare produse中,我像这样加载星级小部件:

$criteria = new CDbCriteria;
                $criteria->condition = "product_id='".$data->product_id."'";
                $rating = Rating::model()->findAll($criteria);
        echo CHtml::beginForm();
        $this->widget('CStarRating',array(
                'name'=>'rating',
                'value'=> $rating[0]->rating,
                'readOnly'=>true,
                ));
        echo CHtml::endForm();

当我加载页面时,所有加载都很好,当我从分页中点击一个数字或next/prev后,它会进行分页但CStarRating无法加载

知道为什么吗?尝试将'id' => '#qwerty'放入ClistView中,但失败

那是因为你是通过ajax加载页面,你加载的js评级在页面加载(通过小部件调用)这一块js不知道DOM已经改变,所以你将不得不重新初始化的CStarRating小部件,你可以把它添加到你的ListView

 $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_listareProduse',  
    'afterAjaxUpdate'=>'js:function(){
            $("[id^=rating] > input").rating({"readOnly":true}); 
     }',
 ));

你还需要改变itemView,因为你使用相同的id"评级"所有评级,id应该是唯一的HTML,如你所知。我已经将行id与评级一起添加,因此您将rating1 rating2等,如果您希望使用其他键,请记住相应地调整afterAjaxUpdate调用

$this->widget('CStarRating',array(
                'name'=>'rating'.$data->id,
                'value'=> $rating[0]->rating,
                'readOnly'=>true,
                ));