Yii';s JUIDatePicker小部件不适用于更新
我正在使用Yii的zii.widgets.jui.CJuiDatePicker,但出现以下问题:Yii';s JUIDatePicker小部件不适用于更新,yii,uidatepicker,jquery-ui-datepicker,Yii,Uidatepicker,Jquery Ui Datepicker,我正在使用Yii的zii.widgets.jui.CJuiDatePicker,但出现以下问题: 在插入新记录或更新日期为空的记录时,该功能运行良好。 但当我尝试用日期值更新记录时,我无法更改它。 你知道会发生什么事吗 $this->widget('zii.widgets.jui.CJuiDatePicker', array( 'model' => $model, 'attribute' => 'datetime', 'name' => $model->datetime, 'op
在插入新记录或更新日期为空的记录时,该功能运行良好。
但当我尝试用日期值更新记录时,我无法更改它。
你知道会发生什么事吗
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'attribute' => 'datetime',
'name' => $model->datetime,
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'yy-mm-dd',
'altFormat'=>'yy-mm-dd',
'changeMonth'=>'true',
'changeYear'=>'true',
'yearRange'=>'1920:2010',
'showOn'=>'both',
'buttonText'=>'...' ),
'htmlOptions'=>array( 'style'=>'height:20px;' ),
) );
尽管该字段名为datetime,但它实际上是一个日期MySQL字段。您应该指定“value”属性:
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'attribute' => 'datetime',
'value' => $model->datetime,
...
我假设在您的更新操作中,您有如下内容:
public function actionUpdate($id){
$model=$this->loadModel($id);
// Assuming the name of your model is DateModel
if(isset($_POST['DateModel'])){
$model->attributes = $_POST['DateModel'];
// more code to validate and save
}
// more code
}
$model->attributes = $_POST['DateModel'];
$model->datetime = $_POST[''.$model->datetime];
现在,如果您为表单视图检查生成的html的源,您将看到datetime
属性的输入元素的id和name被设置为该属性的值,这实际上是由于行'name'=>$model->datetime
而发生的。例如,它最终可能是这样的:
<input type="text" value="2012-02-08" name="2012-02-08" id="2012-02-08" style="height:20px;" class="hasDatepicker">
谢谢,但是正确地从数据库中检索到了该值(param属性可以做到这一点),并且在创建和更新datetime值为NULL时,它确实会写入数据库ok。问题在于datetime不为NULL时的更新。只需删除CJuiDatePicker小部件的
'name'
属性。如果您阅读了我的帖子,这不是问题所在,因为插入新记录时,值已到达数据库,但无论如何,谢谢。嘿,这就是问题所在,我在插入新记录时尝试过它,'name'=>$model->datetime
值为空,因为模型还没有值。但是当更新现有记录时,$model->datetime将有一个值,对吗?因此,该值将成为输入的名称和id。我已经测试过了,请尝试一下,看看它是如何工作的。我也正确地阅读了你的问题。您只需对'name'=>$model->datetime
行进行注释即可尝试。只是根据默认的控制器actionUpdate,yii希望表单的所有值都位于一个数组中,如:ModelName[attributeName],但当您更改名称时,它会变得不同,在您的情况下,yyyy-mm-dd。是的,您是对的,这确实是一个错误,但我已经评论过了,它也不起作用。无论如何,我搬到了一个日期/时间选择器,因为我也需要时间,而且只是在第一次尝试时工作,所以无论如何都不必解决这个问题。谢谢
$model->attributes = $_POST['DateModel'];
$model->datetime = $_POST[''.$model->datetime];