2012-03-20 3 views
0

ItemRenderers에 대한 질문 : 전역 객체 내에있는 응용 프로그램 데이터 인 ArrayCollection이 있다고 가정 해 봅시다. 나는이 데이터로 스파크리스트를 채우고 ArrayCollection을 dataProvider로 설정한다.Flex 4.6 Mobile - ItemRenderers 및 응용 프로그램 데이터

따라서 각 ItemRenderer는 배열에있는 항목의 복사본을 가져옵니다. "데이터 설정"방법을 재정 의하여 데이터를보다 도메인 특정적인 것으로 설정할 수 있습니다. 문제는 데이터가 원래 항목의 사본이라는 것입니다.

이제 ItemRender 내부에서 항목에 데이터를 추가하려고합니다. 예를 들어 항목에 대한 메소드를 호출하여 항목 자체에 대한 세부 정보를로드하도록 지시하거나 사용자가 항목의 내용을 수정할 수 있도록 허용 할 수 있습니다.

분명히 ItemRenderer가 파괴되고 원래 개체가 어떤 일이 발생했는지 알 수 없으므로 복사 작업을 수행하는 동안에는이 작업을 수행 할 수 없습니다.

그래서 가장 좋은 방법은 무엇입니까?

{globalArrayCollection} .getItemAt (this.itemIndex를) 그러나 그것은 나에게 일종의 투박한 것 : 난 그냥 이런 식으로 내 전역 배열에서 원본 항목을 끌어 렌더러의 itemIndex라는를 사용해야합니다. 이 문제를 해결하는 가장 좋은 방법이 있습니까?

답변

0

잘 모르겠습니다.하지만 아이템 렌더러에서 값을 설정/변경할 수있는 방법을 찾고있는 것 같습니다.

렌더러에서 직접 메서드에 액세스 할 수 있습니다. 당신의 렌더러에서

: 당신은 또한뿐만 아니라 당신의 ArrayCollection에 데이터를 설정합니다

public function setSomeValue(aValue:String):void{ 
    someString = aValue; 

} 

.

이를 사용하는 것이이 방법에 액세스하려면 :

var dataGroup:DataGroup = list.dataGroup; 
var itemRenderer:YourItemRenderer = dataGroup.getElementAt(list.selectedIndex) as YourItemRenderer; 

itemRenderer.setSomeValue("string"); 
+0

네, 그 질문을 완벽하게 이해하고 있습니다. 예, 제가 생각해 낸 해결책과 같습니다. 하지만 항상 두 위치에서 코드를 수정해야합니다. 이상적인 솔루션은 아니지만 가능한 유일한 솔루션 일 것입니다. 누군가가 더 나은 해결책을 제공 할 수 있는지 알아보기 위해 며칠을 기다릴 것입니다. 그렇지 않으면 답장으로 표시 할 것입니다. Thanks – Andy

+0

ArrayCollection의 인스턴스를 setSomeValue 메소드에 전달하고 해당 함수 하나를 모두 업데이트 할 수 있습니다. – francis

+0

여전히 인스턴스는 원본 데이터의 사본입니다. 같은 문제. 하나의 글로벌 장소에 단 하나의 데이터 사본을 갖고 싶습니다. 너무 많이 물어보아야합니까? :-) – Andy

0

흠, 당신은 당신의 itemRenderer의 값을 변경하면 원래의 ArrayCollection이 변경되지 않습니다 생각하십니까 이유는 무엇입니까? 나를 위해이 작동하고 초기 ArrayCollection 변경합니다.

[Bindable] 
protected var model:Model; 

override public function set data(value:Object):void 
{ 
    super.data = value; 
    this.model = value as Model; 
} 

protected function changeValue():void 
{ 
    model.value = "newValue"; 
} 

아니면 뭔가 잘못 이해합니까?

+0

코드 예제로 응답을 시도했지만이 사이트에서 올바르게 형식을 지정할 수 없습니다. 어쨌든 위의 코드를 실행하면 원래 ArrayCollection은 수정되지 않습니다.changeValue 메소드 안에 다음 추적을 넣으십시오. \t \t \t \t trace ("BEFORE MODIFICATION :"); \t \t \t \t trace ("전역 변수 :"+ MyModel.dataList [itemIndex] .value); \t \t \t \t trace ("지역 변수 :"+ this.model.value); \t \t \t \t \t \t \t \t this.model.value = "MODIFIED VALUE"; \t \t \t \t \t \t \t \t 추적 ("수정 후 :"); \t \t \t \t trace ("전역 변수 :"+ MyModel.dataList [itemIndex] .value); \t \t \t \t trace ("지역 변수 :"+ this.model.value); – Andy

+0

그래서 나는 네가하는 일을 이해하지 못했다. 정적 데이터 목록을 사용하는 MyModel 클래스를 만들고 수정하려고 했습니까? 어쨌든이 방법을 시도하고이 결과를 얻습니다 : 변경 전 : 전역 변수 : 1 지역 변수 : 1 수정 후 : 전역 변수 : 2 지역 변수 : 2 그래서 바인딩도 완벽하게 작동합니다. – Art