문제

<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) 라인에서 오류가 발생합니다. "정적 유형의 참조를 통해 선택할 수있는 정의 된 속성에 대한 액세스"라고 표시됩니다.

편집] 위의 문제에 대한 해결책은 (전체 혼란은 아니지만) <mx:Component> 태그 상기 구성 요소의 범위 내에 있습니다. 이 구성 요소 외부의 스크립트 및 노드에 액세스하려면 사용해야합니다. 외부 문서 물체. [END EDIT

나는 그것이 무엇을 기대하고 있는지 잘 모르겠다. 나는 그것이 선택된 (ness)의 메소드에 전달 될 것이라고 가정하지만 이것에서 "this"가 무엇인지 이해하지 못하는 것으로 보인다. 문맥.

내가 분명히 잘못한 일을하고 있습니까? 내가 원하는 것은 데이터 소스가 처음에 확인란에 공급 된 상태의 변경 사항을 반영하는 것입니다.

편집 : 방금 함수에 추적 ( 'foo')을 추가 할 때 콘솔에 아무것도 쓰지 않는다는 것을 알았습니다. 체크 박스의 기본 동작 (및 이벤트 캡처)이 내 기능까지 과거의 버블 링을 방지합니까?

또한 문서의 나머지 부분에서 외부 객체에 대한 참조를 추가하면 인식하지 못한다고 말합니다. 나는 Flex가 어떻게 범위를 지키는 지에 대해 완전히 혼란스러워합니다. 추가 지침이나 참조 링크가 실제로 편리 할 것입니다.

도움이 되었습니까?

해결책 4

그래서, 많은 고통을 겪은 후 나는 마침내이 모든 것이 어떻게 작동하는지 알아 냈습니다 ....

Joel은 올바른 길을 가고 있습니다. 이것 당신이 원하는 것을 언급하지 않습니다 (즉, 확인란). 또한 통과하더라도 이것 Checkbox 노드의 메소드에서는 확인란 자체가 아닌 상위 래퍼 클래스를 나타냅니다. 따라서 솔루션은 이벤트에 전달한 다음 대상에 액세스하는 것입니다. 그리고 당신은 집에 있습니다.

다시 말해...

<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>

다른 팁

이것 이 (ha) 사례에서 요소 주변 클래스가 아닌 렌더러 (또는 확인란, DataGridColumn, DataGrid 등). 렌더러를 실제 구성 요소로 나누는 것이 정말 좋습니다. 인라인 구성 요소 접근법이 사용될 때만 큼 범위를 난독 화하지 않습니다.

Itemrenderers에 대한 Peter Ent의 시리즈 매우 유용하며 주제에 대해 알고 싶은 모든 것을 설명해야합니다.

"this"가 MX : 스크립트 요소 인 경우 "parent.selected"를 시도해보십시오.

CheckBox.selected 필요합니다 Boolean 값. 데이터를 설정한다는 사실 String 값은 데이터가 아니라고 말합니다 Boolean.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top