yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
生活随笔
收集整理的這篇文章主要介紹了
yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/****
CJuiDialog for create new model http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/translated by php攻城師http://blog.csdn.net/phpgcsIntroduction
Scenario
Preparation of the form
Enhance the action create
The dialog
Summary
***/Introduction 本教程關(guān)于如何 用一個(gè)對(duì)話框?qū)崿F(xiàn)一個(gè)新建界面
這有點(diǎn)類似 使用 Ajax 鏈接來(lái)實(shí)現(xiàn)目的, 但是我們將會(huì)是喲你個(gè)一個(gè)更簡(jiǎn)單和更高效的方式:
表單的onSubmin 事件(the event onSubmit of the form)背景 Scenario 假設(shè)我們有一個(gè)很多學(xué)生的教室。 在沒有創(chuàng)建教室的情況下, 如果用戶想要填寫學(xué)生信息的表單, 需要先創(chuàng)建一個(gè)教室 并且會(huì)丟失掉之前已經(jīng)輸入的學(xué)生信息。。。
我們想要允許用戶從學(xué)生表單中創(chuàng)建教室,而不需要更改頁(yè)面。準(zhǔn)備表單 Preparation of the form 首先,我們要 一個(gè)創(chuàng)建教室的表單。 我們可以用 gii 來(lái)生成一個(gè) crud 。。
在 普通提交的情況下,這個(gè)表單工作正常了以后, 我們可以將其用于一個(gè) 對(duì)話框。增強(qiáng) 創(chuàng)建動(dòng)作 Enhance the action create
我們需要 增強(qiáng) 創(chuàng)建教室的控制器動(dòng)作, 如下: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,));}我們做了一些小改動(dòng):
在ajax 請(qǐng)求的情況下 我們寫了一個(gè) json 編碼的數(shù)組。在這個(gè)數(shù)組中, 我們返回了一個(gè)狀態(tài) , 整個(gè)表單使用 renderPartial 來(lái)創(chuàng)建的。現(xiàn)在后臺(tái)已經(jīng)完成,我們來(lái)寫對(duì)話框。<?php echo CHtml::link('Create classroom', "", // the link for open the dialogarray('style'=>'cursor: pointer; text-decoration: underline;','onclick'=>"{addClassroom(); $('#dialogClassroom').dialog('open');}"));?><?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog'id'=>'dialogClassroom','options'=>array('title'=>'Create classroom','autoOpen'=>false,'modal'=>true,'width'=>550,'height'=>470,),
));?><div class="divForForm"></div><?php $this->endWidget();?><script type="text/javascript">
// here is the magic
function addClassroom()
{<?php echo CHtml::ajax(array('url'=>array('classroom/create'),'data'=> "js:$(this).serialize()",'type'=>'post','dataType'=>'json','success'=>"function(data){if (data.status == 'failure'){$('#dialogClassroom div.divForForm').html(data.div);// Here is the trick: on submit-> once again this function!$('#dialogClassroom div.divForForm form').submit(addClassroom);}else{$('#dialogClassroom div.divForForm').html(data.div);setTimeout(\"$('#dialogClassroom').dialog('close') \",3000);}} ",))?>;return false; }</script>就這些, 這些代碼我都做了些什么?1, 一個(gè)鏈接,用來(lái)打開對(duì)話框
2, 對(duì)話框本身, 其中是一個(gè) 將會(huì)被 ajax 替代的 div
3, js 函數(shù) addClassroom()
4, 這個(gè)函數(shù)出發(fā)了一個(gè)ajax 請(qǐng)求, 執(zhí)行了我們?cè)谇懊娌襟E中 準(zhǔn)備的 create classroom 的動(dòng)作。
5, 在 status failure 的情況下, 返回的 form 將會(huì) 在 對(duì)話框中在 status success 的情況下, 我們將 替換 div 并在3秒后 關(guān)閉對(duì)話框你還可以返回 新插入的 classroom 的 id ,并將其植入 一個(gè)下拉列表 并自動(dòng)選中。總結(jié):準(zhǔn)備常規(guī)的 gii 生成的 creation 動(dòng)作代碼
修改 create 動(dòng)作 ,增加 處理Ajax 請(qǐng)求的代碼
在任何地方,你可以防止 link , dialog , js 代碼此方法非常合適, 因?yàn)樗點(diǎn)hanges anything in the code of the _form ,因此任何最終添加到 classroom 的 字段 都將在 標(biāo)準(zhǔn)的/對(duì)話框 的創(chuàng)建表單中 通用。
總結(jié)
以上是生活随笔為你收集整理的yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EXCEL-VBA函数:公历转农历,返回
- 下一篇: Taro+react开发(22)--模态