<select id="customer" name="customer" class="searchselect searchselectstyle"> </select>
js:
token = '{{csrf_token()}}'; $(".searchselect").select2({ ajax: { dataType: "json",type: "POST",data: function (params) { return { term: params.term,'_token': token,'data' : function(){ var result = []; var i = 1; $('.searchselect').each(function(){ result[i] = $(this).val(); i++; }); return result; } }; },url: function() { var type = $(this).attr('id'); return '/get' + type; },cache: false,processResults: function (data) { return { results: data }; } } });
编辑
到目前为止我发现的唯一(脏)解决方案如下:
<select id="customer" name="customer" class="searchselect searchselectstyle"> @if(Request::old('customer') != NULL) <option value="{{Request::old('customer')}}">{{$customers->where('id',intval(Request::old('customer')))->first()->name}}</option> @endif </select>
$customers是所有客户的列表,因此这意味着对于每个Select2框,我需要查询大项目列表以使其工作.如果我们在每个Select2框中讨论数千行,这将是非常低效的.
我想必须有一个更好的解决方案.谁能帮我?
基本上他们的建议归结为(在初始化你的AJAX驱动< select>)之后:
>使用预先选择的ID对新的API端点进行另一次AJAX调用
>动态创建一个新选项并附加到底层< select>在AJAX调用完成后,从promise函数(.then())开始
>触发更改事件
>触发select2:select事件(并传递整个数据对象)
假设您已经以各种方式将旧数据闪存到会话,Laravel provides handy access to the previously requested input,特别是这三个:
>通过Request类进行静态访问,例如在OP中请求:: old(‘customer’)
>全球old()
helper,例如old(‘customer’),如果给定字段没有旧输入,则返回null,并且可以将默认值作为第二个参数
>在控制器的Request实例上使用old()方法,例如$请求 – >老( ‘顾客’)
全局辅助方法更常被建议在Blade模板中使用,就像在这里的一些其他答案中一样,当你不需要操作值并且可以直接将其插回时,它非常有用,你可以使用文字输入.
最后一种方法可能为您提供了您正在寻找的答案 – 而不是从视图内部查询整个集合,您可以从控制器中操作集合(类似于OP,但是应该更好,因为它不是在视图中解析它)或者根据旧ID从控制器发出另一个查询并获取所需的数据而不必搜索集合(更少的开销):
$old_customer = Customer::find($request->old('customer'));
无论哪种方式,在刀片模板处理任何内容之前,您都可以在指尖(作为视图变量)获得特定数据.
但是,如果您选择注入数据,它仍将遵循select2建议的模式:
>获取预先选择的数据
>为它创建一个选项
>触发相应的事件
唯一的区别是您不需要从另一个API端点获取数据(除非您需要/需要其他程序原因).