컴포넌트를 만들면서 이것저것 해보다가
Could not resolve <mx:columns> to a component implementation.
이런 에러가 발생 했다. myDataGrid라는 컴포넌트를 DataGrid로부터 상속받아서 만들었는데 두번째 라인에서 발생된거다
<ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
<mx:columns/> <-- 여기서 에러
</ns1:myDataGrid>
<mx:columns/> <-- 여기서 에러
</ns1:myDataGrid>
네임스페이스 문제인줄은 직감했는데 뭐가 문제일까... custom 컴포넌트에서는 mx 컴포넌트를 사용하지 못하는 걸까... 하다가 말도 안되는거 같아서 또 구굴링 들어가 보니 네임스페이스를 바꿔보라고 한다.
<ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
<ns1:columns/> <-- 이렇게
</ns1:myDataGrid>
<ns1:columns/> <-- 이렇게
</ns1:myDataGrid>
바꿨더니 해결됬다....아니 왜?!! 저게 가능하단 말인가...
근데 당연한거였다. 나는 columns를 컴포넌트로 착각하고 있었던 거다. 근데 columns는 컴포넌트가 아니라 DataGrid의 속성이다. 정확히 말하면 myDataGrid 인스턴스의 속성이다. 그래서 당연히 myDataGrid의 네임스페이스인 ns1으로 접근해야 하는것이 옳다.
<ns1:myDataGrid xmlns:ns1="..." xmlns:mx="...">
<ns1:columns>
<mx:DataGridColumn/> <-- 요건 뭔가. 에러나지 않는다!
<ns1:columns>
<ns1:columns>
<mx:DataGridColumn/> <-- 요건 뭔가. 에러나지 않는다!
<ns1:columns>
</ns1:myDataGrid>
위 구문도 에러가 나지 않는다. 왜냐면 <mx:DataGridColumn/>는 ns1:columns의 속성값으로 하나의 독립적인 객체로 생성되기 때문이다. 아무튼 네임스페이스 섞어쓸 수 있다는걸 확인했던 순간이다. 뭐 이전에도 무의식적으로 써왔던거 같기도 하지만.
'Blog > Flex' 카테고리의 다른 글
SystemManager에 대하여 (4) | 2009.11.25 |
---|---|
stage, root에 대하여 (0) | 2009.11.24 |
Application의 컴파일에서 SWF가 실행될 때까지 (2) | 2009.11.20 |
DataGrid 의 아이템 랜더러에 ColorPicker 컴포넌트 사용하기 (0) | 2009.09.25 |
달갑지 않은 internal build error!! (1) | 2009.09.22 |