使用laravel从表中的按钮单击更新页面的一部分

时间:2014-04-15 17:31:46

标签: php laravel

我正在试图找出一个表格,其中每一行都有数据,包括唯一的ID和编辑按钮。单击编辑按钮时,我希望页面的另一部分显示一个表单来编辑该行上的数据。到目前为止,我有类似的东西:

//linePage.blade.php
<table>
    @foreach($lineList as $line)
    <tr>
       <td>{{ $line->Name }}</td>
       <td><a href="{{ action('Forms@linePage',array('lineSelected'=>$line->Name)) }}" class="btn">Edit</a></td>
    </tr>
    @endforeach
</table>

@if (!empty($lineSelected))
   {{-- show form --}}
@endif

//routes.php
Route::get('/LinePage/{lineSelected?}', 'Forms@linePage');
Route::post('/LinePage/{lineSelected?}', 'Forms@updateLinePage');

//Forms.php
public function linePage($lineSelected = NULL){
   $data = array('lineSelected=>$lineSelected);
   return View::make('Forms\linePage',$data);
}
public function updateLinePage($lineSelected = NULL){
   $data = array('lineSelected=>$lineSelected);
   return View::make('Forms\linePage',$data);
}

这对我有用,但我觉得我让它变得比它需要的更复杂。我正确地谈到这个吗?此外,我不喜欢选择行后地址栏如何显示localhost / LinePage / LineName。有可能以某种方式隐藏页面中传递的数据吗?

由于

1 个答案:

答案 0 :(得分:0)

更简单的方法是使用Javascript(和/或)jQuery。

基本思路是,当您单击表中的按钮时,您将发出ajax请求。在该ajax请求中,您只有该特定lineName的表单。通过这种方式,页面将不会重新加载,您也无法更改URL,而且速度更快。

如果您选择使用jQuery执行此操作。你会有类似的东西:

//linePage.blade.php
<table>
    @foreach($lineList as $line)
    <tr>
       <td>{{ $line->Name }}</td>
       <td><a href="#" id="line-{{$line->Name}}" class="btn btn-line">Edit</a></td>
    </tr>
    @endforeach
</table>

//in the footer somewhere, after you load query 
<script>
    $(function()
    {

      $('a.btn-line').click(function(event){

        var id = event.target.id;

        fieldName = id.split('-');
        lineName = fieldName[1];

        $.get(
            "{{action('Forms@lineForm'}}?lineName="+lineName,
            function(data){

                $('div#line-form').html(data);

            }
        );

});
</script>

在您的路线中:

Route::get('/linePage/form/', 'Forms@lineFormPage');

并在您的控制器中,您将返回仅包含表单

的视图

也许这不是最简单的方法,但是每次需要重新加载表单时都不需要刷新,+它会让事情更加分离