0

リストから dataProvider があります。リストには、var -selectedDamageIdx からバインドされた selecteIndex があります。selectedDamageIdx を多かれ少なかれ変更し、同時にリスト内の項目を移動します。すべてがオーバーしている場合、インデックスは正しくありませんが、selectedDamageIdx の値は正しいです。助言がありますか?selectedDamageIdx がパブリックでバインド可能であることを確認しました。バインディングは mxml で行われます。

私のリストはダメージリストです。ダメージ itemRenderer とダメージ オブジェクトを使用します。基本的に、私がやっていることは次のとおりです。リストと同じ情報を含むサムネイルがあります。サムネイル内で何かをドラッグしてアイテムを移動すると、リストのアイテムの位置が更新されます。_from と _to の位置にアクセスできる場所に、次のように onChangePosition という関数があります。だから私は次のことをします:

if(_to > _from)     
{
    (damages.dataProvider as ArrayCollection).addItemAt(damage,_to);
    (damages.dataProvider as ArrayCollection).removeItemAt(_from);
     selectedDamageIdx = _to-1;//because of shift all the items between the _from and _to will move back one position. And the moved item will actually get the index to-1
}

else if (_from > _to)
{
    (damages.dataProvider as ArrayCollection).removeItemAt(_from);
    (damages.dataProvider as ArrayCollection).addItemAt(damage,_to);
    selectedDamageIdx = _to;
}

これはサムネイルで正常に機能し、selectedDamageIdx は期待値を取得します。しかし、追加と削除の操作のために、リストが間違った項目を選択し、selectedIndex が間違っていると思います。リストの selectedIndex の _to > _from が 1 少ない最初のケース。_to < _from the selectedIndex が必要以上に 1 つ多い 2 番目のケース。

4

1 に答える 1

0

わかりました、私が見つけた解決策は次のとおりです。

if(_to > _from)     
{
    (damages.dataProvider as ArrayCollection).addItemAt(damage,_to);
    damages.addEventListener(FlexEvent.UPDATE_COMPLETE,updateIndex);
    (damages.dataProvider as ArrayCollection).removeItemAt(_from);    
}
else if (_from > _to)
{
    (damages.dataProvider as ArrayCollection).removeItemAt(_from);
    damages.addEventListener(FlexEvent.UPDATE_COMPLETE,updateIndex);
    (damages.dataProvider as ArrayCollection).addItemAt(damage,_to);
}

次に updateIndex で:

  damages.removeEventListener(FlexEvent.UPDATE_COMPLETE,updateIndex);
    if(_to > _from)     
        selectedDamageIdx = _to-1;    
    else if (_from > _to)
        selectedDamageIdx = _to;

リストが更新されただけでなく、コンポーネントもそれを確認して表示リストを更新したため、バインディングは機能します。それが誰かを助けることを願っています。

于 2012-11-20T13:47:56.933 に答える