0

jQueryダイアログボックスにポップアップする編集フォームがあり、ダイアログボックスを閉じたり他のページにリダイレクトしたりせずに検証を実行するためのAjax送信ボタンがあります。私の問題は、私のフォームに現在の値と新しい値の空の入力ボックスを表示し、新しい値が数値でない場合でも現在の値がその値に変更されることです。

たとえば、編集ウィンドウに「月単位」の現在の値5が表示され、ユーザーが5sdfと入力した場合、検証が開始され、エラーが修正されたと表示されますが、現在の値の列には5sdfが表示されます。最新の有効な値を維持するために、現在の値を維持するための支援が必要です。

コントローラでの編集アクションのコードは次のとおりです。

public function edit($id = null)
    {
        $this->LocalClock->id = $id;
        $this->set('isEditValid', false);
        $this->set('editValidationErrors', false);

        if ($this->request->is('get'))
        {
               $this->request->data = $this->LocalClock->read();
               $this->set('localClocks', $this->LocalClock->read());
            }
            else
            {
               if ($this->LocalClock->save($this->request->data))
               {
                $this->set('isEditValid', true);
                $this->set('editValidationErrors', false);
                $this->set('localClocks', $this->request->data);
            }
               else
               {
                $this->set('isEditValid', false);
                $this->set('editValidationErrors', true);
                $this->set('localClocks', $this->request->data);
               }
        }
    }

これが私のedit.ctpです:

<div id="edit_table">

<div id="edit_errors">
</div>

<?php echo $this->Form->create('LocalClock', array('action' => 'edit', 'inputDefaults' => array('label' => false))); ?>
<?php echo $this->Form->input('id', array('type' => 'hidden')); ?>

<table>
    <thead><tr>
        <th>Field</th>  <th>Current Value</th>  <th>New Value</th>
    </tr></thead>

    <tbody>
<tr><td>Name</td><td> <?php echo $localClocks['LocalClock']['name']; ?></td><td>  <?php echo $this->Form->input('LocalClock.name', array('id' => 'focusMeEdit'));?></td></tr>
    <tr><td>Auto Offset</td><td><?php echo $localClocks['LocalClock']['auto_offset'];?> </td><td><?php echo $this->Form->input('LocalClock.auto_offset');?> </td></tr>
    <tr><td>UTC Offset Sec</td><td><?php echo $localClocks['LocalClock']['utc_offset_sec'];?> </td><td><?php echo $this->Form->input('LocalClock.utc_offset_sec');?></td></tr>
    <tr><td>In Month</td><td><?php echo $localClocks['LocalClock']['in_month'];?></td>  <td><?php echo $this->Form->input('LocalClock.in_month');?> </td>  </tr>
    </tbody>
</table>

<?php
    // The Ajax Helper submit is used to submit the changes made to the edit form
    // because it allows the modal window to be loaded with the updated edit view
    // without leaving the modal window. 
    echo $this->Ajax->submit('Save Changes', array(
        'url' => array('controller' => 'localClocks', 'action' => 'edit'),
        'update' => 'edit_table'));

    // Call the close Dialog() function if data was validated sucessfully; valid == true. 
    // Else it stays open displaying validation error message.
    if (false != $isEditValid)
    {
        echo "<script>$('#[id*=dialog]').dialog('close');</script>";
        echo "<script>$('#success_messages').dialog('open');</script>";
        echo "<script>$('#success_messages').text('Local Clock Successfully Edited')</script>";
    }
    if(false != $editValidationErrors)
    {
        echo "<script>$('#edit_errors').html('<h3><em><font color=\"red\">Please Correct Errors Before Proceeding</font></em></h3>')</script>";
    }

echo $this->Form->end(); ?>

</div>

問題が私の行動にあるのか、それを引き起こしている見解にあるのかはわかりません。

前もって感謝します

4

1 に答える 1

1

誤った値を表示するための標準的な動作。何らかの理由で無効な長い回答を入力した場合は、回答を削除したくないでしょう。そうしないと、多くの再入力が必要になる可能性があります。

保存が失敗した後、元のレコードを読み取らないのはなぜですか。$ this-> LocalClock-> invalidFields()でエラーを確認し、$ this-> request-> dataを影響を受けるフィールドの元の値に置き換えますか?

于 2012-06-21T00:27:06.117 に答える