2011-09-21 2 views
0

여기에 바인드 가능한 변수가 잘못 사용되고있을 가능성이 있으므로 여기서 시도해보십시오.AS3에서 바인드 가능한 변수에 대한 질문

사람들이 항목 중 하나를 클릭하여 배경을 선택할 수있는 간단한 스파크 목록이 있습니다. 배경이 선택되면 나중에 사용자가 응용 프로그램을 나중에 다시로드 할 때이를 사용하기 위해 SharedObject에 저장합니다. 로 만들어

이리스트가있는 ArrayCollection (바인더 제본 변수)에 의해 채워지는 다음과 같습니다

[Bindable] private var arrBG:ArrayCollection = new ArrayCollection(); 

이를 다음 채워됩니다 다음과 같은 방법 :

var objImage:Object; 
var strSharedObjImage:String = sharedObj.sharedBackground.data.backgroundIndex; 
// Background 
objImage = new Object(); 
objImage.icon = ICONS_PATH + objImage.label; 
objImage.label = "Titanium"; 
objImage.selected = (strSharedObjImage == objImage.fileName) ? true : false; 
arrBG.addItem(objImage); 

objImage = new Object(); 
objImage.icon = ICONS_PATH + objImage.fileName; 
objImage.label = "Iron"; 
objImage.selected = (strSharedObjImage == objImage.label) ? true : false; 
arrBG.addItem(objImage); 

내가 다음에하는 dataProvider로 사용 내 스파크리스트.

위의 내용을 확인한 경우 내 공유 객체의 값이 "label"속성의 값과 같으면 내 객체에 selected라는 속성이 있습니다.이 속성은 true로 설정됩니다. 내 스파크 목록의 아이템 렌더러에

, 나는 다음과 같은 한 :

<s:ItemRenderer name="HorizontalListSkin" 
       xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       autoDrawBackground="false" 
       creationComplete="initMenuSkin(event)" 
       > 

    <fx:Script> 
     <![CDATA[ 
     protected function initMenuSkin(event:Event):void 
     { 

      iconImage.source = data.icon; 
      iconText.text = data.label; 

      // Check to see if the item we're displying is selected. If it is make it stand out 
      if(data.selected){ 
       iconText.setStyle("color", "Green") 
      } 
     } 

     ]]> 
    </fx:Script> 

    <s:VGroup x="10" y="10" width="50" height="50" buttonMode="true" horizontalAlign="center"> 
     <s:Image id="iconImage" horizontalCenter="0"/> 
     <s:Label id="iconText" fontFamily="Verdana" fontSize="11" fontWeight="bold" horizontalCenter="0" showTruncationTip="false"/> 
    </s:VGroup> 

</s:ItemRenderer> 

을 당신이 볼 수 그래서, 나는 단순히 내 선택 항목에 글꼴의 색상을 변경하고 있습니다.

로드 할 때 이전에 선택한 항목이 녹색으로 표시되고 새 항목을 선택하면 대신 녹색으로 표시됩니다.

분명히 여기에 큰 차이가 있습니다. 위의 설명에 아무 것도 없기 때문에 이론상 바인딩 가능한 변수를 업데이트하는 것에 대해 언급했기 때문에 그것이 내 스파크 목록에 전파됩니다. (바인딩 가능한 변수가되면 항목을 동시에 업데이트 할 것이라고 생각합니다. 내 목록에 (?)).

음, 몇 가지 다른 방법으로 시도했지만 디버거에서 배열이 업데이트되었다고하지만 내 목록이 전혀 업데이트되지 않고 다른 항목 만 표시됩니다 화면을 닫고 다시 열면 녹색으로 표시됩니다. (모두 다시 불러 오면)

위에서 설명한 전체 논리가 함수 내에 포함되어 있기 때문에 트리거 한 배경 목록에서 항목을 선택할 때마다 선택한 "배경"을 알기 위해 모든 로직을 적용 할 "loadBackgrounds"메서드와 변수가 내 스파크 목록에 바인딩되어 있기 때문에 목록을 업데이트하려고합니다. 것은, 그렇지 않습니다.

내가 뭘 잘못하고 있니? 나는 완전히 단호한 태도를 취하고 있으며 이것을하는 훨씬 쉬운 방법이 있지만 나는 그것을 볼 수 없다.

여기에 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

1

데이터를 새로 고침해야하는 컬렉션에 데이터를 설정 한 후.

arrBG.refresh(); 

[편집] 나는 당신의 질문을 다시 읽어
좋아.
나는 당신이 묻고있는 것을 오해 한 것 같습니다.
데이터 공급자를 변경 한 후에 항목 렌더러가 새 목록을 다시 렌더링하도록 목록을 업데이트하는 방법을 알고 싶습니까?

function newSelection(val:String):void{ 
    for each(var item:Object in arrBG){ 
    if(item.label == val){ 
     item.selected = true; 
    }else{ 
     item.selected = false; 
    } 
    } 
    arrBG.refresh(); 
} 

//
// 목록을 깜박 몇 가지 이유를 들어 dataProvider의 업데이트/변경

<s:ItemRenderer name="HorizontalListSkin" 
       xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       autoDrawBackground="false" 
       > 

    <fx:Script> 
     <![CDATA[ 
     override protected function commitProperties():void{ 
      super.commitProperties(); 
      iconImage.source = data.icon; 
      iconText.text = data.label; 

      // Check to see if the item we're displying is selected. If it is make it stand out 
      if(data.selected){ 
       iconText.setStyle("color", "Green") 
      } 
     } 

     ]]> 
    </fx:Script> 

    <s:VGroup x="10" y="10" width="50" height="50" buttonMode="true" horizontalAlign="center"> 
     <s:Image id="iconImage" horizontalCenter="0"/> 
     <s:Label id="iconText" fontFamily="Verdana" fontSize="11" fontWeight="bold" horizontalCenter="0" showTruncationTip="false"/> 
    </s:VGroup> 

</s:ItemRenderer> 
+0

이있을 때마다 트리거 속성을 커밋이 렌더러하지 초기화에 속성을 커밋 사용하고, 항목을 무작위로 반환합니다. 비록 내가 아이템 렌더러를 사용할 때 무작위 방식으로 아이템을 반환하는 것처럼 보입니다. 그래서 여기에 코드도 추가하고 있습니다. –

+0

좋아요, 당신이 지금 묻고있는 것을보고 내 대답을 업데이트 한 것 같아요 –

+0

오늘 밤에 확인하고 다시 연락 할게요.하지만 내 문제는 무엇인지 잘 들리 네요. 오늘 나중에 너에게 돌아갈거야. 건배 –

관련 문제