【问题标题】:Yii's JUIDatePicker widget not working for updatesYii 的 JUIDatePicker 小部件不适用于更新
【发布时间】:2012-02-05 16:04:03
【问题描述】:

我用的是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 字段。

【问题讨论】:

    标签: yii uidatepicker jquery-ui-datepicker


    【解决方案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
    }
    

    现在,如果您检查 form view 生成的 html 的来源,您会看到 idname 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-&gt;attributes = $_POST['DateModel']; 行来分配属性的值。
    因此,一个简单的解决方案是不使用 CJuiDatePicker 小部件的'name' 属性。

    编辑:

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

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

    【讨论】:

    • 只需删除 CJuiDatePicker 小部件的 'name' 属性。
    • 好吧,如果您阅读了我的帖子,那不是问题,因为在插入新记录时值会到达数据库,但无论如何,谢谢。
    • 嘿,这就是问题所在,我试过了,在插入新记录时,'name'=&gt;$model-&gt;datetime 值为空,因为模型还没有值。但是在更新现有记录时,$model->datetime 会有一个值,对吧?因此该值成为输入的名称和 id。我已经测试过了,请尝试一下,看看它是如何工作的。我也确实正确地阅读了你的问题。您只需在'name'=&gt;$model-&gt;datetime 行评论即可尝试。
    • 只是根据默认控制器 actionUpdate,yii 期望 form 的所有值都在一个数组中,例如:ModelName[attributeName],但是当你改变命名它变得不同,在你的情况下是 yyyy-mm-dd。
    • 是的,你是对的,这确实是一个错误,但我已经评论了它,它也不起作用。无论如何,我搬到了日期/时间选择器,因为我也需要时间,而且只是在第一次尝试时工作,所以无论如何都不必解决这个问题。谢谢!
    【解决方案2】:

    你应该指定“值”属性:

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

    【讨论】:

    • 谢谢,但该值是从数据库中正确检索的(参数 attribute 会这样做),并且在日期时间值为 NULL 时创建和更新的情况下,它确实被写入数据库。问题在于日期时间不为 NULL 时的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2018-08-06
    • 2011-06-25
    • 2021-10-03
    • 2012-11-12
    相关资源
    最近更新 更多