1. /****
  2. CJuiDialog for create new model
  3.  
  4. http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/
  5.  
  6. translated by php攻城师
  7.  
  8. http://blog.csdn.net/phpgcs
  9.  
  10. Introduction
  11. Scenario
  12. Preparation of the form
  13. Enhance the action create
  14. The dialog
  15. Summary
  16. ***/
  17.  
  18. Introduction
  19.  
  20. 本教程关于如何 用一个对话框实现一个新建界面
  21. 这有点类似 使用 Ajax 链接来实现目的, 但是我们将会是哟你个一个更简单和更高效的方式:
  22. 表单的onSubmin 事件(the event onSubmit of the form
  23.  
  24. 背景 Scenario
  25.  
  26. 假设我们有一个很多学生的教室。 在没有创建教室的情况下, 如果用户想要填写学生信息的表单, 需要先创建一个教室 并且会丢失掉之前已经输入的学生信息。。。
  27. 我们想要允许用户从学生表单中创建教室,而不需要更改页面。
  28.  
  29. 准备表单 Preparation of the form
  30.  
  31. 首先,我们要 一个创建教室的表单。 我们可以用 gii 来生成一个 crud 。。
  32. 普通提交的情况下,这个表单工作正常了以后, 我们可以将其用于一个 对话框。
  33.  
  34. 增强 创建动作 Enhance the action create
  35. 我们需要 增强 创建教室的控制器动作, 如下:
  36.  
  37. public function actionCreate()
  38. {
  39. $model=new Classroom;
  40.  
  41. // Uncomment the following line if AJAX validation is needed
  42. // $this->performAjaxValidation($model);
  43.  
  44. if(isset($_POST['Classroom']))
  45. {
  46. $model->attributes=$_POST['Classroom'];
  47. if($model->save())
  48. {
  49. if (Yii::app()->request->isAjaxRequest)
  50. {
  51. echo CJSON::encode(array(
  52. 'status'=>'success',
  53. 'div'=>"Classroom successfully added"
  54. ));
  55. exit;
  56. }
  57. else
  58. $this->redirect(array('view','id'=>$model->id));
  59. }
  60. }
  61.  
  62. if (Yii::app()->request->isAjaxRequest)
  63. {
  64. echo CJSON::encode(array(
  65. 'status'=>'failure',
  66. 'div'=>$this->renderPartial('_form', array('model'=>$model), true)));
  67. exit;
  68. }
  69. else
  70. $this->render('create',array('model'=>$model,));
  71. }
  72.  
  73. 我们做了一些小改动:
  74. ajax 请求的情况下 我们写了一个 json 编码的数组。在这个数组中, 我们返回了一个状态 整个表单使用 renderPartial 来创建的。
  75.  
  76. 现在后台已经完成,我们来写对话框。
  77.  
  78. <?php echo CHtml::link('Create classroom', "", // the link for open the dialog
  79. array(
  80. 'style'=>'cursor: pointer; text-decoration: underline;',
  81. 'onclick'=>"{addClassroom(); $('#dialogClassroom').dialog('open');}"));?>
  82.  
  83. <?php
  84. $this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog
  85. 'id'=>'dialogClassroom',
  86. 'options'=>array(
  87. 'title'=>'Create classroom',
  88. 'autoOpen'=>false,
  89. 'modal'=>true,
  90. 'width'=>550,
  91. 'height'=>470,
  92. ),
  93. ));?>
  94.  
  95. <div class="divForForm"></div>
  96.  
  97. <?php $this->endWidget();?>
  98.  
  99. <script type="text/javascript">
  100. // here is the magic
  101. function addClassroom()
  102. {
  103. <?php echo CHtml::ajax(array(
  104. 'url'=>array('classroom/create'),
  105. 'data'=> "js:$(this).serialize()",
  106. 'type'=>'post',
  107. 'dataType'=>'json',
  108. 'success'=>"function(data)
  109. {
  110. if (data.status == 'failure')
  111. {
  112. $('#dialogClassroom div.divForForm').html(data.div);
  113. // Here is the trick: on submit-> once again this function!
  114. $('#dialogClassroom div.divForForm form').submit(addClassroom);
  115. }
  116. else
  117. {
  118. $('#dialogClassroom div.divForForm').html(data.div);
  119. setTimeout(\"$('#dialogClassroom').dialog('close') \",3000);
  120. }
  121.  
  122. } ",
  123. ))?>;
  124. return false;
  125.  
  126. }
  127.  
  128. </script>
  129.  
  130. 就这些, 这些代码我都做了些什么?
  131.  
  132. 1 一个链接,用来打开对话框
  133. 2 对话框本身, 其中是一个 将会被 ajax 替代的 div
  134. 3 js 函数 addClassroom()
  135. 4, 这个函数出发了一个ajax 请求, 执行了我们在前面步骤中 准备的 create classroom 的动作。
  136. 5 status failure 的情况下, 返回的 form 将会 对话框中
  137. status success 的情况下, 我们将 替换 div 并在3秒后 关闭对话框
  138.  
  139. 你还可以返回 新插入的 classroom id ,并将其植入 一个下拉列表 并自动选中。
  140.  
  141. 总结:
  142.  
  143. 准备常规的 gii 生成的 creation 动作代码
  144. 修改 create 动作 ,增加 处理Ajax 请求的代码
  145. 在任何地方,你可以防止 link dialog js 代码
  146.  
  147. 此方法非常合适, 因为它changes anything in the code of the _form ,因此任何最终添加到 classroom 字段 都将在 标准的/对话框 的创建表单中 通用。

yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)的更多相关文章

  1. laravel创建新model数据的两种方法

    laravel中的CRUD操作中,通过对代表数据表中row的model对象操作,来更新数据库表. 对于创建新的row的操作,有两种功能上相同的方法: 1.create: $user = User::c ...

  2. EF5&MVC4 学习1、创建新的Contoso University Application,并创建Model Class 生成对应的database

    参考:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/creating-an-entity-framewo ...

  3. magento中Model创建以及该Model对于数据库的增删改查

    本文是按照magento英文文档照做与翻译的. Model层的实现是mvc框架的一个巨大的部分.它代表了你的应用的数据,或者说大多数应用没有数据是无用的.Magento的Model扮演着一个重要的角色 ...

  4. rails 创建项目、创建controller、model等

    rails2之前创建新项目: rails3以及更高版本创建新项目:rails new webname 创建数据表model:rails g model user name:string sex:str ...

  5. [Tensorflow] 使用 model.save_weights() 保存 / 加载 Keras Subclassed Model

    在 parameters.py 中,定义了各类参数. # training data directory TRAINING_DATA_DIR = './data/' # checkpoint dire ...

  6. Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)

    Django 小实例S1 简易学生选课管理系统 第3节--创建用户模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新 ...

  7. php大力力 [023节]CREATE TABLE创建新表sql写字段备注(2015-08-27)

    2015-08-27 php大力力023.CREATE TABLE创建新表sql写字段备注 http://www.cnblogs.com/dalitongxue/p/4762182.html 参考: ...

  8. (转)Qt Model/View 学习笔记 (四)——创建新的Models

    创建新的Models 介绍 model/view组件之间功能的分离,允许创建model利用现成的views.这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和QTre ...

  9. php 通过 create user 和grant 命令无法创建数据库用户和授权的解决办法

    php 通过 create user 和grant 命令无法创建数据库用户和授权的解决办法 解决办法, 通过 insert 命令的方式进行创建. 创建数据库用户: $sql= "insert ...

随机推荐

  1. 射频识别技术漫谈(18)——Mifare Desfire

    Mifare  DESFire(MF3 IC D40/D41,本文以D40为例)遵守14443 TypeA协议,卡内的数据以文件形式存储,所以有人认为它是准CPU卡,主要用于安全性要求较高的非接触式领 ...

  2. C#获取桌面壁纸图片的路径(Desktop Wallpaper)

    原文 C#获取桌面壁纸图片的路径(Desktop Wallpaper) 利用 Windows 的 API 获取桌面壁纸的实际路径,使用的是 SystemParametersInfo 这个API,此AP ...

  3. CodeIgniter结合Bootstrap

    CodeIgniter-Bootstrap结合了 cI和bootstrap的长处,一个专注于服务器端,一个专注于ui,这个把2个结合起来了.框架地址: http://www.andyhawthorne ...

  4. java面试题系列12

    1.面向对象的特征有哪些方面 a.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象 ...

  5. Sublime 操作技巧

    吐槽一下:刚下载的subime不是等宽字体,空格.表达.字母i什么的都很窄,看着不方便: 根据网上说的换成等宽字体,试了好多种字体,字体变了.但宽度没变. 然后有装了soda,和相应的color-th ...

  6. [译]MDX 介绍

    关于MDX MDX (Multi Dimensional eXpression language) 是非常强大的工具,可以将你的多维数据库/cube 发挥到极致. 本文会覆盖MDX基础,并且希望能使你 ...

  7. A.归并排序

    归并排序 (求逆序数) 归并排序:递归+合并+排序 时间复杂度:O(n logn)    空间复杂度:O(n) 用途:1.排序  2.求逆序对数 Description In this problem ...

  8. Java基础之编程语法(二)

    1.常量: 整型:整数,4个字节. 长整型:整数,8个字节.以L结尾. 单精度浮点数:小数,4个字节.以F结尾. 双精度浮点数:小数,8个字节. 布尔:只有两个值,真(true)或假(false),1 ...

  9. CentOS 6.5 PYPI本地源制作

    转载:blog.csdn.net/tantexian   一.安装pip2pi工具: pip install pip2pi 或 git clone https://github.com/wolever ...

  10. Nginx+uwsgi+supervisor+Ubuntu+flask

    Nginx+uwsgi+supervisor+Ubuntu+flask Nginx+uwsgi+supervisor在Ubuntu上部署flask应用 网上找了许多讲关于Flask应用部署的文章几乎都 ...