厚底!
我有一个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,
));