博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
阅读量:5278 次
发布时间:2019-06-14

本文共 2773 字,大约阅读时间需要 9 分钟。

/****CJuiDialog for create new model http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/translated by php攻城师http://blog.csdn.net/phpgcsIntroductionScenarioPreparation of the formEnhance the action createThe dialogSummary***/Introduction 本教程关于如何 用一个对话框实现一个新建界面这有点类似 使用 Ajax 链接来实现目的, 但是我们将会是哟你个一个更简单和更高效的方式:表单的onSubmin 事件(the event onSubmit of the form)背景 Scenario 假设我们有一个很多学生的教室。 在没有创建教室的情况下, 如果用户想要填写学生信息的表单, 需要先创建一个教室 并且会丢失掉之前已经输入的学生信息。。。我们想要允许用户从学生表单中创建教室,而不需要更改页面。准备表单  Preparation of the form 首先,我们要 一个创建教室的表单。 我们可以用 gii 来生成一个 crud 。。在 普通提交的情况下,这个表单工作正常了以后, 我们可以将其用于一个 对话框。增强 创建动作 Enhance the action create 我们需要 增强 创建教室的控制器动作, 如下:public function actionCreate()    {        $model=new Classroom;         // Uncomment the following line if AJAX validation is needed        // $this->performAjaxValidation($model);         if(isset($_POST['Classroom']))        {            $model->attributes=$_POST['Classroom'];            if($model->save())            {                if (Yii::app()->request->isAjaxRequest)                {                    echo CJSON::encode(array(                        'status'=>'success',                         'div'=>"Classroom successfully added"                        ));                    exit;                               }                else                    $this->redirect(array('view','id'=>$model->id));            }        }         if (Yii::app()->request->isAjaxRequest)        {            echo CJSON::encode(array(                'status'=>'failure',                 'div'=>$this->renderPartial('_form', array('model'=>$model), true)));            exit;                       }        else            $this->render('create',array('model'=>$model,));    }我们做了一些小改动: 在ajax 请求的情况下 我们写了一个 json 编码的数组。在这个数组中, 我们返回了一个状态 , 整个表单使用 renderPartial 来创建的。现在后台已经完成,我们来写对话框。
'cursor: pointer; text-decoration: underline;', 'onclick'=>"{addClassroom(); $('#dialogClassroom').dialog('open');}"));?>
beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog 'id'=>'dialogClassroom', 'options'=>array( 'title'=>'Create classroom', 'autoOpen'=>false, 'modal'=>true, 'width'=>550, 'height'=>470, ),));?>
endWidget();?> 就这些, 这些代码我都做了些什么?1, 一个链接,用来打开对话框2, 对话框本身, 其中是一个 将会被 ajax 替代的 div3, js 函数 addClassroom()4, 这个函数出发了一个ajax 请求, 执行了我们在前面步骤中 准备的 create classroom 的动作。5, 在 status failure 的情况下, 返回的 form 将会 在 对话框中 在 status success 的情况下, 我们将 替换 div 并在3秒后 关闭对话框 你还可以返回 新插入的 classroom 的 id ,并将其植入 一个下拉列表 并自动选中。总结:准备常规的 gii 生成的 creation 动作代码修改 create 动作 ,增加 处理Ajax 请求的代码在任何地方,你可以防止 link , dialog , js 代码此方法非常合适, 因为它changes anything in the code of the _form ,因此任何最终添加到 classroom 的 字段 都将在 标准的/对话框 的创建表单中 通用。

转载于:https://www.cnblogs.com/james1207/p/3315600.html

你可能感兴趣的文章
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
CSS中隐藏内容的3种方法及属性值
查看>>
每天一个linux命令(1):ls命令
查看>>
根据xml生成相应的对象类
查看>>
查看ASP.NET : ViewState
查看>>
Android StageFrightMediaScanner源码解析
查看>>
vue项目中开启Eslint碰到的一些问题及其规范
查看>>
循环队列实现
查看>>
CSS层模型
查看>>
springBoot 项目 jar/war打包 并运行
查看>>
HDU 1501 Zipper
查看>>
打包java程序生成exe
查看>>
八叉树
查看>>
poj 1129 搜索
查看>>
Git 远程仓库
查看>>
HttpClient的巨坑
查看>>