<?php
$arrayData = myModel::all();
foreach($arrayData as $arrayList){
$pureData = array_add($pureData, $arrayList->elementValue, $arrayList->elementText);
}
echo Form::select('multiSelectName', $pureData, null, array());
?>
我怎样才能做到这一点?
提前致谢。
答案 0 :(得分:2)
一种解决方案是获取所有可用选项,然后选择已选择的选项,然后找出它们是否匹配,并创建一个设置了selected
参数的select元素。
我不认为可以使用Form
助手来完成
(我知道它只能用一个值完成,但没有尝试过多个值)
获取所有可用选项(尝试获取某些内容以便像id那样唯一地标识它们)
$all_options=Model::lists('id','name');
我正在使用lists方法,该方法将返回一个数组,其中包含所有可用的id作为值,而名称作为数组的键。
然后获取所有选定的值
$already_selected_options =Model::with('related_model')->lists('id','name');
(如果您正在使用这样的雄辩的东西来获得相关的ID)
然后在你看来
<select multiple>
@foreach($all_options as $name => $id)
@if(in_array($id,$already_selected_options))
<option value="{{$id}}" selected>{{$name}}</option>
@else
<option value="{{$id}}">{{$name}}</option>
@endif
@endforeach
<select>
答案 1 :(得分:0)
我认为如果可能的话,你应该用javascript代替它。它在延迟方面几乎不引人注意,并且不会浪费服务器端的周期。这是我最近的一个项目的例子。作为奖励,如果您在select上内联声明onchange事件,它将在执行该函数后立即为您调用。
$('select.select-onload').each(function(index){
if(typeof $(this).attr('data-selected') !== 'undefined'){
if($(this).attr('data-selected') == ''){
return false;
}
$(this).val( $(this).attr('data-selected') );
//we may have a callback. lets manually invoke it.
if(typeof $(this).attr('onchange') !== 'undefined'){
var callback = $(this).attr('onchange').replace('();','').trim();
window[callback].call(window);
}
}
});
用法:
<select class="select-onload" data-selected="{{id}}">
<!--whatever options value is 5 is the one that will be selected.-->
</select>