2009-09-17 2 views
0
<mx:DataGrid x="10" y="10" width="180" height="302" id="dgActions" dataProvider="{actionCollection}"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Action" dataField="name"/> 
     <mx:DataGridColumn headerText="" dataField="setting" width="30" rendererIsEditor="true"> 
     <mx:itemRenderer > 
      <mx:Component> 
       <mx:Box width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> 
        <mx:CheckBox selected="{data.setting}" click="setActionSetting()"> 
        <mx:Script> 
         <![CDATA[ 
         private function setActionSetting(){ 
          data.setting = String(this.selected); 
         } 
         ]]> 
        </mx:Script> 
        </mx:CheckBox> 
       </mx:Box> 
      </mx:Component> 
     </mx:itemRenderer> 
     </mx:DataGridColumn> 
    </mx:columns> 
</mx:DataGrid> 

"정적 유형의 참조를 통해 선택된 특정 속성에 대한 액세스가 가능합니다."라는 이유로 data.setting = String (this.selected) 행에 오류가 발생합니다.플렉스 CheckBox 질문

[편집] 위의 문제에 대한 해결책 (비록 완전히 엉망이 아님)은 일단 <mx:Component> 태그 안에 있으면 해당 구성 요소의 범위 내에 있습니다. 이 구성 요소 외부의 스크립트와 노드에 액세스하려면 outerDocument 개체를 사용해야합니다.

나는 그것이 무엇을 기대하는지 모르겠다. 나는 그 체크 박스의 선택된 (ness) 값의 참/거짓 값을 메서드로 전달할 것이라고 가정하지만, 이 문맥에서 "이것이"무엇인지 이해하십시오.

나는 분명히 잘못된 것을하고 있습니까? 내가 원했던 것은 데이터 소스가 초기에 체크 박스에 입력 된 상태의 변화를 반영하는 것입니다.

편집 : 필자는 트레이스 ('foo')를 함수에 추가하면 콘솔에 아무 것도 쓰지 않는 것으로 나타났습니다. 체크 박스의 기본 동작 (및 이벤트 캡처)이 내 함수로 버블 링하는 것을 방지합니까?

또한 문서의 나머지 부분에있는 객체에 대한 참조를 추가하면 해당 객체를 인식하지 못한다고 알려줍니다. 나는 Flex가 어떤 것들을 어떻게 다루는 지 완전히 혼란 스럽다 ... 어떤 추가적인 지침이나 참조에 대한 링크는 정말 편리 할 것이다.

답변

0

그래서, 고통의 큰 거래 후, 나는 마침내 알아 낸 조엘이 올바른 궤도에 어떻게이 모든 작품 ....

이 당신이 그것을 희망 무엇을 참조하지 않습니다 는 것 참조 (즉, 체크 박스). 또한 을 체크 상자 노드의 메서드에 전달하더라도 확인란 자체가 아닌 부모 래퍼 클래스를 참조합니다. 따라서 솔루션은 이벤트를 전달한 다음 대상에 액세스합니다.이 확인란은 마침내 확인란입니다. 그리고 너는 집에있어. 환언

...

<mx:CheckBox selected="{data.setting}" click="setActionSetting(event)"> 
    <mx:Script> 
     <![CDATA[ 
      private function setActionSetting(e:Event):void{ 
       data.setting = e.target.selected; 
       trace("n=" + data.name + " set to " + data.setting); 
       //the name is the other piece of the data that I omitted for clarity 
      } 
     ]]> 
    </mx:Script> 
</mx:CheckBox> 
+0

여전히 가장 단순한 유스 케이스 (이 요구 사항을 충족시키지 못함) 외의 인라인 구성 요소를 사용하는 것이 궁극적으로 좋지 않은 솔루션이라고 생각합니다. 너무 많은 홀수 범위 문제가 발생하거나 디버그하기가 너무 어렵지 않고 적절한 항목 렌더러 구성 요소를 만들면 언제든지 다시 돌아와야 할 경우 코드를 훨씬 쉽게 관리 할 수 ​​있습니다. –

+0

좋아,하지만 나는 아직도 당신이 대안으로 추천하고있는 것이 확실하지 않다. 또한, 여기에는 복잡한 내용이 표시되지 않습니다 ... 확인란에 입력 된 부울 데이터 값이 있습니다. 확인란을 선택하면 데이터 원본 값이 변경 내용을 반영하고 서버로 다시 전달됩니다. . –

0

"this"가 mx : Script 요소 인 것으로 추측해야한다면 "parent.selected"를 시도해보십시오.

+0

사실'this'이 예에서는 CheckBox에있는 클래스의 인스턴스를 지칭한다. 따라서 이것은 불필요하지만 정확합니다. –

0

CheckBox.selected에는 Boolean 값이 필요합니다. 사실 012.값으로 data.setting을 설정하면 data.setting은 Boolean이 아닙니다. 이 (HA) 경우

+0

아니요 .. 아니요 .. 부울이며 체크 박스는 모두 올바른 상태 (제공된 데이터를 기반으로)로 렌더링되고, 일부는 켜져 있고 일부는 꺼져 있습니다. –

1

성분 렌더러 아닌 (또는 체크 박스 등,은 DataGridColumn, 데이터 격자) 주변 클래스를 참조한다. 렌더러를 실제 구성 요소로 분리하는 것이 정말 좋습니다. 인라인 구성 요소 접근법이 사용되는 경우만큼 범위를 흐리게 처리하지 않아도됩니다.

Peter Ent's series on itemRenderers은 매우 유용하며 주제에 대해 알고 싶은 모든 것을 설명해야합니다.

+0

혹시라도이 예에 대한 링크가 없어도 될까요? 나는 Flex에 익숙하지 않고 내가하는 일을 정확히 추천하고 있는지 명확하지 않습니다. –

+0

Flex의 아이템 렌더러에 ** ** 최종 리소스에 대한 링크를 추가했습니다. –

+0

감사합니다. 링크가 도움이됩니다. 제 질문을 수정하고 모든 것을 지우는 내 대답을 게시했습니다. –