Laravel Livewire Select 渲染时字段为空,但数组仍保留选定值
Laravel Livewire Select Field gets empty on render, but array still holds the selected value
我的 Livewire 组件 Select 字段有一个奇怪的行为,
我正在使用一个数组,该数组会在单击“添加项目”按钮时展开。
当我在表单的字段中 select 一个值时,它得到 selected 但在我的 livewire 脚本中调用更改函数后消失了。
如果我 select 该值第二次起作用。
我拥有的:
Blade:
@foreach ($positions as $index => $position)
<div class="col-sm-6" >
<!-- abk -->
<label for="pos "> </label><br> <label for="auftrag">Auftrag:</label>
@if(($positions[$index]['part_id']>0) && ($positions[$index]['part_id'] != 9999))
@if(isset($positions[$index]['abks']) && count($positions[$index]['abks'])>0)
<!-- true if there are abks -->
<select class="form-control" id="positions[{{$index}}]['abk_id']" wire:change="abkChanged({{$index}},$event.target.value)" >
<option value="0" >-</option>
@foreach($positions[$index]['abks'] as $abk)
<option value="{{$abk['id']}}">
{{$abk['auftragsnummer']}} -Fert.menge: {{$abk['fertigungsmenge']}} - geänd.: {{\Carbon\Carbon::parse($abk['updated_at'])->format('d.m.Y - H:i') }}</option>
@endforeach
<option value="9999" >eigene Beschreibung</option>
</select>
@else
<!-- todo what to do if there are no abks... -->
@endif
@endif <!-- if part_id >0 & not 9999-->
@if(isset($position['showabktext']) && $position['showabktext'] == 1)
<input type="text" class="form-control" name="positions[{{$index}}]['abktext']" wire:model="positions.{{$index}}.abktext" placeholder="ABK/AB # ..."/>
@endif
@if (isset($position['abk_id'])) {{$position['abk_id']}}
positions: {{$positions[$index]['abk_id']}}
@endif
@endforeach
组件:
public function partChanged($indexPosition) { //if part is selected
// dd($indexPosition); // holds $this->positions[$indexPosition]
if($this->positions[$indexPosition]['part_id'] == 9999) { //own description
$this->positions[$indexPosition]['showartikeltext']=1; //own artikelbezeichnung
$this->positions[$indexPosition]['showlszustandtext']=1; //own bearbeitet nach zeichnung etc
$this->positions[$indexPosition]['showabktext']=1; //own abk text
} else { //part from db
$this->positions[$indexPosition]['showartikeltext']=0;
$this->positions[$indexPosition]['showlszustandtext']=0;
$this->positions[$indexPosition]['abks']= Abk::where('part_id','=',$this->positions[$indexPosition]['part_id'])->orderBy('updated_at')->get();//client_id
$this->positions[$indexPosition]['showabktext']=0;
if(empty($this->positions[$indexPosition]['abks'])|| count($this->positions[$indexPosition]['abks'])<1) {
$this->positions[$indexPosition]['showabktext']=1;
}
}
//zustand
}
public function abkChanged($indexPosition, $value) {
$this->positions[$indexPosition]['abk_id'] = $value;
if($this->positions[$indexPosition]['abk_id'] === 9999) {
$this->positions[$indexPosition]['showabktext']=1;
}
// dd($this->positions[$indexPosition]['abk_id']);
// dd($this->positions);
//dd($value);
}
public function addPos(){
$counter = count($this->positions);
$this->positions[] = ['position'=>$counter, 'part_id'=>0];
}
public function removePos($index){
unset($this->positions[$index]); //lösche ag aus array
$this->positions = array_values($this->positions); //reorder Array!
}
理解必须发生的事情的缩写:
我 select 一个客户端 -> 然后在 select 一个部分渲染属于该部分的 abks 之后渲染客户端部分。
然后 select abk.
Selecting 一个客户端,然后 selecting 一个部分工作得很好 - 但如果我 select 一个 abk selection 消失($positions.$index .['abk_id]) - 但是如果我将另一个项目添加到列表(另一部分)中,abk selection 会按预期呈现。在第一项上,如果我 select 第二个与第一个上的行为相同。
我想我有一个 id / name DOM 问题但是我看不到它...
请帮忙:(
谢谢!
史蒂夫
...哦,天哪,多么糟糕的“错误”,如果我从 Select 字段选项中删除 Carbon->parse 方法,它会按预期工作——我不知道为什么……但是现在可以使用了。
我的 Livewire 组件 Select 字段有一个奇怪的行为, 我正在使用一个数组,该数组会在单击“添加项目”按钮时展开。 当我在表单的字段中 select 一个值时,它得到 selected 但在我的 livewire 脚本中调用更改函数后消失了。 如果我 select 该值第二次起作用。 我拥有的: Blade:
@foreach ($positions as $index => $position)
<div class="col-sm-6" >
<!-- abk -->
<label for="pos "> </label><br> <label for="auftrag">Auftrag:</label>
@if(($positions[$index]['part_id']>0) && ($positions[$index]['part_id'] != 9999))
@if(isset($positions[$index]['abks']) && count($positions[$index]['abks'])>0)
<!-- true if there are abks -->
<select class="form-control" id="positions[{{$index}}]['abk_id']" wire:change="abkChanged({{$index}},$event.target.value)" >
<option value="0" >-</option>
@foreach($positions[$index]['abks'] as $abk)
<option value="{{$abk['id']}}">
{{$abk['auftragsnummer']}} -Fert.menge: {{$abk['fertigungsmenge']}} - geänd.: {{\Carbon\Carbon::parse($abk['updated_at'])->format('d.m.Y - H:i') }}</option>
@endforeach
<option value="9999" >eigene Beschreibung</option>
</select>
@else
<!-- todo what to do if there are no abks... -->
@endif
@endif <!-- if part_id >0 & not 9999-->
@if(isset($position['showabktext']) && $position['showabktext'] == 1)
<input type="text" class="form-control" name="positions[{{$index}}]['abktext']" wire:model="positions.{{$index}}.abktext" placeholder="ABK/AB # ..."/>
@endif
@if (isset($position['abk_id'])) {{$position['abk_id']}}
positions: {{$positions[$index]['abk_id']}}
@endif
@endforeach
组件:
public function partChanged($indexPosition) { //if part is selected
// dd($indexPosition); // holds $this->positions[$indexPosition]
if($this->positions[$indexPosition]['part_id'] == 9999) { //own description
$this->positions[$indexPosition]['showartikeltext']=1; //own artikelbezeichnung
$this->positions[$indexPosition]['showlszustandtext']=1; //own bearbeitet nach zeichnung etc
$this->positions[$indexPosition]['showabktext']=1; //own abk text
} else { //part from db
$this->positions[$indexPosition]['showartikeltext']=0;
$this->positions[$indexPosition]['showlszustandtext']=0;
$this->positions[$indexPosition]['abks']= Abk::where('part_id','=',$this->positions[$indexPosition]['part_id'])->orderBy('updated_at')->get();//client_id
$this->positions[$indexPosition]['showabktext']=0;
if(empty($this->positions[$indexPosition]['abks'])|| count($this->positions[$indexPosition]['abks'])<1) {
$this->positions[$indexPosition]['showabktext']=1;
}
}
//zustand
}
public function abkChanged($indexPosition, $value) {
$this->positions[$indexPosition]['abk_id'] = $value;
if($this->positions[$indexPosition]['abk_id'] === 9999) {
$this->positions[$indexPosition]['showabktext']=1;
}
// dd($this->positions[$indexPosition]['abk_id']);
// dd($this->positions);
//dd($value);
}
public function addPos(){
$counter = count($this->positions);
$this->positions[] = ['position'=>$counter, 'part_id'=>0];
}
public function removePos($index){
unset($this->positions[$index]); //lösche ag aus array
$this->positions = array_values($this->positions); //reorder Array!
}
理解必须发生的事情的缩写: 我 select 一个客户端 -> 然后在 select 一个部分渲染属于该部分的 abks 之后渲染客户端部分。 然后 select abk.
Selecting 一个客户端,然后 selecting 一个部分工作得很好 - 但如果我 select 一个 abk selection 消失($positions.$index .['abk_id]) - 但是如果我将另一个项目添加到列表(另一部分)中,abk selection 会按预期呈现。在第一项上,如果我 select 第二个与第一个上的行为相同。
我想我有一个 id / name DOM 问题但是我看不到它...
请帮忙:(
谢谢! 史蒂夫
...哦,天哪,多么糟糕的“错误”,如果我从 Select 字段选项中删除 Carbon->parse 方法,它会按预期工作——我不知道为什么……但是现在可以使用了。