Yii的JUIDatePicker小部件不适用于更新

时间:2012-02-05 16:04:03

标签: yii uidatepicker jquery-ui-datepicker

我正在使用Yii的 zii.widgets.jui.CJuiDatePicker 并出现以下问题:
插入新记录或更新具有NULL日期的记录时,它可以正常工作 但是当我尝试用日期值更新记录时,我无法改变它 你知道可能会发生什么吗?

$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字段。

2 个答案:

答案 0 :(得分:1)

您应指定“值”属性:

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
  'model' => $model,
  'attribute' => 'datetime',
  'value' => $model->datetime,
  ...

答案 1 :(得分:1)

我假设您的更新操作中有这样的内容:

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
}

现在,如果您检查表单视图生成的html的来源,您会看到 id 名称您的datetime属性的输入元素被设置为该属性的值,该值实际上是由于行'name'=>$model->datetime而发生的。例如,它可能最终会像:

<input type="text" value="2012-02-08" name="2012-02-08" id="2012-02-08" style="height:20px;" class="hasDatepicker">

我们想要的是:

<input type="text" value="2012-02-08" name="DateModel[datetime]" id="DateModel_datetime" style="height:20px;" class="hasDatepicker">

这样我们的控制器操作就可以使用行$model->attributes = $_POST['DateModel'];来分配属性的值 因此,一个简单的解决方案是不使用 CJuiDatePicker小部件的'name'属性。

编辑:

否则,如果您绝对需要'name'属性,则必须在控制器操作中设置日期字段,如下所示:

$model->attributes = $_POST['DateModel'];
$model->datetime = $_POST[''.$model->datetime];