如何自动填充通过Laravel 4中的ajax加载的表单部分中的字段值?

时间:2014-03-28 20:08:04

标签: ajax forms dynamic laravel-4 autofill

我有一个表单的一部分,它根据用户在控件中的选择动态加载不同的字段集。我使用javascript事件处理程序来检测选择何时更改,并使用AJAX(使用HTML有效负载)来提取适当的字段集。

我希望能够使用Laravel的Form::getValueAttribute()方法自动填写表单字段'静态和动态表单部分中的值。但是,我的AJAX调用加载的局部视图与我的主窗体的视图没有相同的Form类实例,所以我不能在部分中调用getValueAttribute()

我的想法是让AJAX调用POST,并序列化必要的数据(Input::old()的子集或模型数据,具体取决于页面是否因验证错误而加载,或者是UPDATE请求)与POST一起发送,以便我得到的HTML片段正确设置值。

这是获得我想要的最佳方式吗?如果是这样,Laravel是否有任何工具可以帮助进行表单数据的序列化?如果没有,那可能是更好的方法呢?

1 个答案:

答案 0 :(得分:0)

我找到了一种我更喜欢的方法。正常加载视图时,我像往常一样使用AJAX加载部分。但是当加载视图进行后期验证或编辑时,我使用Laravel的Views的嵌套方法将包含正确字段的局部视图直接嵌套到响应中。然后,partial可以访问我需要的所有输入和错误数据。用户仍然可以像往常一样更改字段集,但如果他们已经在之前选择的字段集中设置了一些值,我会为他们设置确认提示。如果他们决定继续进行,则清除字段集并像往常一样通过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>