【问题标题】:Yii Render a Model View Inside CJuiDialogYii 在 CJuiDialog 中渲染模型视图
【发布时间】:2014-07-31 21:03:33
【问题描述】:

我想在 CJui 对话框中完全渲染一个模型视图。

我所做的是我有一个模型作业,我有由 Gii 生成的视图文件。

我想要什么——点击 index.php 上每条记录的 id 时,我应该打开 CJuiDialog 对话框而不是渲染视图文件。

但是,出了点问题——当访问索引页面时,它会显示作业模型的所有记录,并弹出一个 CJui 对话框,显示第一条记录(id=1 记录)

它在索引页面上显示剩余记录的视图。

index.php

<?php
  $this->breadcrumbs=array(
 'Jobs',
);

$this->menu=array(
array('label'=>'Create Jobs','url'=>array('create')),
array('label'=>'Manage Jobs','url'=>array('admin')),
);
?>

<h1>Jobs</h1>

<?php $this->widget('bootstrap.widgets.TbListView',array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>

_view.php

<?php 
   $target = 'window.location='."'".$this->createUrl('jobs/index')."'";
 $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
  'id'=>'mydialog',
 // additional javascript options for the dialog plugin
  'options'=>array(
    'title'=>'View Job..',
    'autoOpen'=>true,
  'buttons' => array(
array('text'=>'Route','click'=> 'js:function(){'.$target.'}'),
array('text'=>'Cancel','click'=> 'js:function(){$(this).dialog("close");}'),
),
  'height'=>400,
 'width'=>450,
 'show'=>'fade',
 'hide'=>'fade',
   ),
 ));

    //define the model
  // $model=new Jobs;
 echo 'dialog content here';
 $this->renderPartial('/jobs/view',array('model'=>$data));

 $this->endWidget('zii.widgets.jui.CJuiDialog');

// the link that may open the dialog
 echo CHtml::link('open dialog', '#', array(
'onclick'=>'$("#mydialog").dialog("open"); return false;',
 ));
 ?>

<div class="view">

<b><?php echo CHtml::encode($data->getAttributeLabel('job_id')); ?>:</b>
<?php echo CHtml::link(CHtml::encode($data->job_id),array('view','id'=>$data->job_id)); ?>
<br />
<b><?php echo CHtml::encode($data->getAttributeLabel('job_code')); ?>:</b>
<?php echo CHtml::encode($data->job_code); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('job_title')); ?>:</b>
<?php echo CHtml::encode($data->job_title); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('job_desc')); ?>:</b>
<?php echo CHtml::encode($data->job_desc); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('job_lastdate')); ?>:</b>
<?php echo CHtml::encode($data->job_lastdate); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('job_photo')); ?>:</b>
<?php echo CHtml::encode($data->job_photo); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('job_file')); ?>:</b>
<?php echo CHtml::encode($data->job_file); ?>
<br />

<?php /*
<b><?php echo CHtml::encode($data->getAttributeLabel('job_createtime')); ?>:</b>
<?php echo CHtml::encode($data->job_createtime); ?>
<br />

*/ ?>

</div>

view.php

 <h1>View Jobs #<?php echo $model->job_id; ?></h1>

 <?php $this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$model,
'attributes'=>array(
    'job_id',
    'job_code',
    'job_title',
    'job_desc',
    'job_lastdate',
    'job_photo',
    'job_file',
    'job_createtime',
),
)); ?>

控制器 actionView()

 public function actionView($id)
 {

    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
 }

我的代码没有出错。 帮我解决这个问题.. 谢谢你。。

【问题讨论】:

  • 如果我理解正确,你想点击 index.php,它将在列表视图中显示所有记录。单击 id 时,您想在弹出窗口中显示详细视图吗?

标签: php yii cjuidialog


【解决方案1】:

假设我理解您的问题,您的小部件声明存在一些问题。

1.对于屏幕上的每个 ui 小部件,您的 id 不是唯一的。 将'id' =&gt; 'mydialog' 更改为"dialog_{$data-&gt;id}"。确保更改 onclick jQuery id 以匹配该 id。

2.您将autoOpen 设置为true。将其设置为false

还有。您在每个对话中都在呼应'dialog content here' :)。

干杯

【讨论】:

  • 我按照您的建议尝试了,但它不起作用。 ''id'=>'dialog_{$data->id}', . . ... $this->renderPartial('/jobs/view',array('model'=>$data)); $this->endWidget('zii.widgets.jui.CJuiDialog'); // 可能打开对话框的链接 echo CHtml::link('open dialog', '#', array( 'onclick'=>'$("#dialog_{$data->id}").dialog("打开"); 返回 false;', )); ?>'
  • 什么不起作用?您是否收到错误消息?我有它在我的最后工作。将您的代码与pastebin.com/3Y83BUPK 进行比较哦,如果这是您的应用程序中的代码,您需要将'dialog_{$data->id}' 括在双引号中;不是单引号。
  • 已解决,非常感谢。但我没有得到代码 $dialogId = "dialog_{$data-&gt;job_id}";'id'=&gt;$dialogId, 的确切含义,array( 'onclick'=&gt;'$("#'. $dialogId .'").dialog("open"); return false;', 但它的工作原理
  • 设置$dialogId = "dialog_{$data-&gt;job_id}";意味着html元素的id类似于dialog_1。下一条记录将是dialog_2,假设作业表有 id=1 的记录和下一条 id=2 的记录。现在,当您使用 jQuery 选择对话框元素时,您可以这样做,因为所有对话框元素都有一个 unique id。否则,将使用一个 id 选择多个对话框。
  • 非常感谢,我明白了。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2013-06-20
相关资源
最近更新 更多