2012-05-29 39 views
0

我有CListView,並且在im重新渲染一個有按鈕的視圖時,單擊它時會打開一個CJUIDialog。CJUIDialog不與CListView尋呼機一起工作控制器

但是當我通過頁面控制器進入下一頁時。 CJUIDialog內容加載到頁面而無需點擊按鈕。

任何想法,爲什麼它會這樣?

如果有人能幫助我,那將會很棒。 謝謝!

+0

你在哪裏把代碼爲CJUIDialog一代?在CListView的項目視圖中? – sucotronic

+0

是的......它是在項目視圖內.. – era

+0

是這個問題嗎? – era

回答

1

好吧,Yii的生成自動方式很多控件的ID,所以爲了避免我建議你拿出的相互作用以下列方式處理了項目視圖的事件衝突:

在在產生CListView中頁:

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_post', // refers to the partial view named '_post' 
    'sortableAttributes'=>array(
     'title', 
     'create_time'=>'Post Time', 
    ), 
)); 
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog', 
    'options'=>array(
     'title'=>'Dialog', 
     'autoOpen'=>false, 
    ), 
)); 
$this->endWidget('zii.widgets.jui.CJuiDialog'); 

在項目視圖頁面:

echo CHtml::htmlButton('Button',array('onclick' => '$("#dialog").dialog("open");')); 

如果你需要做的數據行的東西(像我們這些數據的id屬性),你可以創建一個自定義的javascript函數,當按鈕被點擊時它將接收數據。

echo CHtml::htmlButton('Button',array('onclick' => 'myFunction('.$data->id.')')); 

與前面的例子則是:

<?php 
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_post', // refers to the partial view named '_post' 
    'sortableAttributes'=>array(
     'title', 
     'create_time'=>'Post Time', 
    ), 
)); 
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog', 
    'options'=>array(
     'title'=>'Dialog', 
     'autoOpen'=>false, 
    ), 
)); 
$this->endWidget('zii.widgets.jui.CJuiDialog'); 
?> 
<script type="text/javascript"> 
function myFunction(id) { 
    // you can put whatever you need inside the dialog 
    $("#dialog").html(id); 
    // open the dialog 
    $("#dialog").dialog("open"); 
} 
</script> 
+0

k ...很酷的場景......可以正常工作......但是如果我有一百個項目,我將不得不有100個對話框與獨特的ID是嗎?或者有沒有辦法從項目頁面發送參數到對話框? – era

+0

我已經更新了第二種方案的更多詳細信息。請注意,只有一個Jquery UI對話框,但是您可以根據從項目視圖中的$ data中檢索的一些數據(您可以將其作爲參數傳遞給javascript函數)通過​​javascript更改其內容。 – sucotronic

+0

感謝它的工作.. – era