我正在尝试在我的应用程序中创建类似于查找字段。
目的是用户点击浏览按钮,然后弹出一个内部有网格(CGridView)的对话框(widget)。用户可以选择一行,并将“描述”列发送到我的表单中的textField。
我已经通过在表单中注册以下脚本来完成此部分:
Yii::app()->clientScript->registerScript('scriptName', '
function onSelectionChange()
{
var keys = $("#CGridViewUsuario > div.keys > span");
$("#CGridViewUsuario > table > tbody > tr").each(function(i)
{
if($(this).hasClass("selected"))
{
$("#Funcionario_UsuarioId").val($(this).children(":nth-child(1)").text());
}
});
}
');
我的小部件:
<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'mydialog',
'options'=>array(
'title'=>'Usuário',
'width' => 'auto',
'autoOpen'=>false,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => Usuario::model()->searchByLogin($model->UsuarioId),
'id' => 'CGridViewUsuario',
'filter' => Usuario::model(),
'columns' => array(
'Login',
'Nome',
),
'htmlOptions' => array(
'style'=>'cursor: pointer;'
),
'selectionChanged'=>'js:function(id){ onSelectionChange(); }',
));
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>
现在我有两项任务要做:
当用户点击浏览按钮时,应显示CGridView 过滤器已经填写了他在表单中输入的输入。
使用CGridView过滤器。
不要忘记,如果所有这些都成功运行,当用户点击保存按钮时,我将不得不在模型中保存lookupField的相应ID。
答案 0 :(得分:1)
您可以,只需为对话框的open
事件和回调函数提供回调函数
使用jquery选择器选择要选择的输入过滤器(gridview),并从所需表单中的任何字段填充其值:
$("#CGridViewUsuario .filters input[name='Userio[login]']").val($("#Funcionario_UsuarioId").val());
// replace the names/ids to whatever you are using,
// if you want to set multiple values, then you might have to run a loop or each() or something of that sort
然后使用 jquery.yiigridview.js '$.fn.yiiGridView.update
函数调用服务器根据您填充的值更新gridview:
$.fn.yiiGridView.update("CGridViewUsuario", {
data: $("#CGridViewUsuario .filters input").serialize()
});
您可以在生成的html或资源文件夹中看到 jquery.yiigridview.js 文件,在其中您可以找到$.fn.yiiGridView.update
函数。
要订阅对话框的open
事件,您可以将函数名称传递到对话框的'open'
字段的'options'
选项:
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'mydialog',
'options'=>array(
'title'=>'Usuário',
// other options
'open'=>'js:dialogOpenCallback'
),
));
您可以在registerScript()
调用本身中定义该功能:
<?php
Yii::app()->clientScript->registerScript('scriptName', '
function onSelectionChange()
{...}
function dialogOpenCallback(event,ui){
$("#CGridViewUsuario .filters input[name='Userio[login]']").val($("#Funcionario_UsuarioId").val());
// replace the names/ids to whatever you are using,
$.fn.yiiGridView.update("CGridViewUsuario", {
data: $("#CGridViewUsuario .filters input").serialize()
});
}
');
此外,您可以更改调用onSelectionChange()
功能的方式:
'selectionChanged'=>'js:onSelectionChange'//'js:function(id){ onSelectionChange(); }',
并更改您的功能签名:function onSelectionChange(id)
。
几乎忘记了,将数据提供者和网格视图的过滤器更改为模型实例,而不是静态实例。