본문 바로가기

Blog/Flex

Custom 컴포넌트에는 MX 컴포넌트를 못쓰는걸까?

컴포넌트를 만들면서 이것저것 해보다가

Could not resolve <mx:columns> to a component implementation.

이런 에러가 발생 했다. myDataGrid라는 컴포넌트를 DataGrid로부터 상속받아서 만들었는데 두번째 라인에서 발생된거다

 <ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
 <mx:columns/> <-- 여기서 에러
</ns1:myDataGrid>

네임스페이스 문제인줄은 직감했는데 뭐가 문제일까... custom 컴포넌트에서는 mx 컴포넌트를 사용하지 못하는 걸까... 하다가 말도 안되는거 같아서 또 구굴링 들어가 보니 네임스페이스를 바꿔보라고 한다.

 <ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
 <ns1:columns/> <-- 이렇게
</ns1:myDataGrid>

바꿨더니 해결됬다....아니 왜?!! 저게 가능하단 말인가...
근데 당연한거였다. 나는 columns를 컴포넌트로 착각하고 있었던 거다. 근데 columns는 컴포넌트가 아니라 DataGrid의 속성이다. 정확히 말하면 myDataGrid 인스턴스의 속성이다. 그래서 당연히 myDataGrid의 네임스페이스인 ns1으로 접근해야 하는것이 옳다.
 

 <ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
 <ns1:columns>
  <mx:DataGridColumn/> <-- 요건 뭔가. 에러나지 않는다!
 <ns1:columns>

</ns1:myDataGrid>

위 구문도 에러가 나지 않는다. 왜냐면 <mx:DataGridColumn/>는 ns1:columns의 속성으로 하나의 독립적인 객체로 생성되기 때문이다. 아무튼 네임스페이스 섞어쓸 수 있다는걸 확인했던 순간이다. 뭐 이전에도 무의식적으로 써왔던거 같기도 하지만.