2014-03-28 2 views
0

У меня есть раздел формы, который динамически загружает разные наборы полей на основе выбора пользователя в элементе управления. Я использую обработчик событий javascript, чтобы определить, когда изменяется выбор, и используя AJAX (с полезной нагрузкой HTML), чтобы вытащить правильный набор полей.Как автоматически заполнять значения полей в разделе формы, загружаемой через ajax в Laravel 4?

Я хочу, чтобы использовать метод Laravel Form::getValueAttribute(), чтобы автоматически заполнять значения полей формы как в статической, так и в динамической частях формы. Однако частичное представление, загруженное моим вызовом AJAX, не имеет того же экземпляра класса Form, что и представление с моей основной формой, поэтому я не могу просто вызвать getValueAttribute() в частичном.

Я думал, что AJAX вызовет POST и сериализует необходимые данные (подмножество Input::old() или данные модели в зависимости от того, загружена ли страница в результате ошибок проверки или запроса UPDATE) для отправки с POST, чтобы возвращаемый HTML-фрагмент имел правильные значения.

Это лучший способ получить то, что я хочу? Если да, то есть ли у Laravel какие-либо инструменты, помогающие с сериализацией данных формы? Если нет, что может быть лучшим подходом?

ответ

0

Я нашел подход, который мне больше нравится. Когда представление загружается нормально, я обычно использую AJAX для загрузки частичного. Но когда представление загружается для проверки после обратной связи или для редактирования, я использую метод гнезда Laravel's Views для вложения частичного представления, содержащего правильные поля, непосредственно в ответ. Затем частичный доступ ко всем данным ввода и ошибки, которые мне нужны. Пользователь по-прежнему может изменить набор полей, как обычно, но я предлагаю их для подтверждения, если они уже установили некоторые значения в поле, которое они ранее выбрали. Если они все равно решат продолжить, набор полей будет удален, и новый набор полей будет введен через AJAX, как обычно.

Мой код выглядит примерно так:

Контроллер:

public function newThing() { 
    if (Request::session()->has('errors')) { 
     // this is a validation post-back 
     return View::make('thing') 
     ->nest('fields', 'fields_partial'); 
    } else { 
     // just a normal unfilled form 
     return View::make('thing'); 
    } 
} 

public function editThing() { 
    return View::make('thing') 
     ->nest('fields', 'fields_partial'); 
} 

Вид: thing.blade.php (только надрез его)

... 
<form> 
    ... 
    <select id="picker">...</select> 
    <div class="sub-fields"> 
     {{ isset($fields) ? $fields : '' }} 
    </div> 
    ... 
</form> 
... 
<script> 
    $('#picker').change(function() { 
     // if any .sub-fields inputs have been changed, get confirmation from the user 

     // if user confirms, do ajax stuff to replace .sub-fields contents with new field set 
     // otherwise cancel the change 
    }); 
</script> 
Смежные вопросы