我在CGridView中有一个自定义的CButtonColumn。 其中一个自定义按钮正在触发CJuiDialog。现在的问题是, 如何在单击时传递id,以便Controller获取id,然后我可以在CJuiDialog中传递模型和renderPartial吗?
这是我到目前为止所拥有的
'see' => array(
'label' => 'View',
'url' => 'Yii::app()->controller->createUrl("mycontrollerName/view,array("id" => "$data->id"))',
'click' => "function( e ){
e.preventDefault();
$( '#view-dialog' ).data('id',$(this).attr('id'))
.dialog( { title: 'View Details' } )
.dialog( 'open' ); }"
),
在控制器操作中给出了代码片段..我希望有ID ..是$ _GET [' id']?或$ _POST [' id&#39 ;]?..只要我能得到它并不重要,这样我就可以用它在模型函数中查询
答案 0 :(得分:0)
您的代码中存在一些语法错误,但更重要的是,您不应将$ data-> id包装在任何引号中。
'see' => array(
'label' => 'View',
'url' => 'Yii::app()->createUrl("mycontrollerName/view", array("id" => $data->id))',
'click' => "function( e ){
e.preventDefault();
$( '#view-dialog' ).data('id',$(this).attr('id'))
.dialog( { title: 'View Details' } )
.dialog( 'open' ); }",
),
所以你试图在javascript代码中传递id值。 这更像是一个jQuery问题,而不是与Yii有很多关系。
运行console.log($(this).attr('id'));你可能会看到你得到一个'未定义'值。这是因为Yii为按钮生成的标签不包含id参数。
最简单的解决方案是使用jQuery来处理url参数。
e.g。
$( '#view-dialog' ).data('id',$(this).attr('href'))
如果不需要整个URL,则可以使用正则表达式仅解析数字ID。
或者,你必须在按钮选项参数中传递id。
e.g。
'see' => array(
'label' => 'View',
'url' => 'Yii::app()->createUrl("mycontrollerName/view", array("id" => $data->id))',
'options' => array('id' => $data->id),
'click' => "function( e ){
...
但请注意,Yii不会在'option'参数中呈现$ data-> id的值,因为这不会在CButtonColumn中进行评估。 您必须覆盖Yii的CButtonColumn(请参阅http://www.yiiframework.com/wiki/372/cbuttoncolumn-use-special-variable-data-for-the-id-in-the-options-of-a-button/)
就个人而言,如果我是你,我会在一些外部代码中实现一些Javascript,并使用正则表达式来解析URL中的id。