我正在试图找出一个表格,其中每一行都有数据,包括唯一的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。有可能以某种方式隐藏页面中传递的数据吗?
由于
答案 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');
并在您的控制器中,您将返回仅包含表单
的视图也许这不是最简单的方法,但是每次需要重新加载表单时都不需要刷新,+它会让事情更加分离