Alloy에서 xml id값에 – 들어가면 에러 나나요?

안녕하세요?

Alloy에서 xml id값에 – 들어가면 에러 나나요?

일단 UI 잡는다고 프로토타입 작업으로 화면 만드는데…id에 값 주고 읽어 올라고 했거든요..

근데 이상하게 컴파일은 별 문제 없는데…에뮬레이터에서 실행시 자꾸 다운되는거에요.

그래서 이렇게 저렇게 바꿔봤는데…어떤 경우엔 정상이고..어떤 경우엔 다운되더군요…

어제부터 도저히 이유를 몰라 헤매다가 오늘 이유를 찾은 듯 싶어요. 아까운 내 시간…-.-

 

ScorllView에 imageView를 여러개 붙이고 유튜브 이미지를 붙였는데…

그중에 tIcSa-p5dmg이게 있었습니다. 이미지 링크는 상관없는데..

유튜브 key에 해당하는 부분이라서 이 부분을 ImageView의 id로 적었는데…

거기서 에러가 나는 것 같습니다. 아이디를 임으로 변경해보니 작동 잘 됩니다.

아마 imageView를 controller 상에서 직접 common.js 방식으로 생성하면 괜찮을것 같긴한데…

정적 xml에서 자동 생성되는 alloy code에서는 충돌이 생기나 봅니다.

 

_ (언더스코어는 괜찮은것 같구요), – (다시) 부분만 문제가 생기는것 같습니다.

제 말이 맞나요?


Facebook Group's likes and commnets
ByungDae Sohn(01-08 19:09) : id 값 넣아도 에러 안납니다 다른 문제인듯 싶네요

부일님 말씀처럼 xml에는 문제가 없는 것이어서 막상 제 자신도 코드를짤때도 id에 들어가는 값이 그냥 value처럼 여겨지지 key일거라는 사실을 인지하지 못하고 있었는데 부일님 덕에 명확히 인지하게 되었네요.

감사합니다. :)

맞습니다…xml에서는 별 문제가 없는것이라서…javascript에서 변수명에선 안되죠…^^

감사합니다..

 

javascript에서 – 를 변수명에 넣을 수 없습니다. object의 key값으로는 가능하나 선언하거나 접근할때 object.key 을 이용한 방식이 아닌  object["key"] 방식으로 만 가능합니다. 한마디로 key 이름에 -를 넣는건 혼란을 야기할 수 있습니다.

var a-3=4; //Syntax 에러
var obj = {};
obj.a-3=3; //Syntax에러
obj["a-3"] = 3; //정상
alert(obj.a-3); //NaN
alert(obj["a-3"])=3; //3

 

alloy에서의 xml에서 사용하는 id의 값은 컴파일이 되고 나면  key값으로 사용됩니다. (해당 view의 id에 접근할때 보면 $.id 형태로 접근)
따라서 -가 포함된 스트링은 키가 아닌 value로 저장하여 사용하면 문제가 없습니다.

<View id="myView" youtubeKey="tIcSa-p5dmg"></View>

 

alloy view 작성시 xml의 엘리먼트에 id값을 줄때 – (다시)로 연결하면 에러가 발생한다는 이야기입니다.

resource  폴더를 보니…화일 생성을 제대로 못하는것 같더군요..

혹시나해서 간단하게 샘플 만들어 테스트 하니 역시더군요.

#################  index.xml ############

<Alloy>

<Window class=”container”>

<Button id=”button1″ onClick=”doClick”>Hello, World</Button>

</Window>

</Alloy>

#################  index.js ############

function doClick(e) {

alert(JSON.stringify(e.source));

}

$.index.open();

###################

Button id를 button, button1, button_1은 에러가 안납니다.

하지만 button-1은 컴파일 자체가 안됩니다. 해서 생성된 resources/alloy/controller/index.js 보면 뭔가 생성됬는데 엉망으로 되어 있습니다.

또 button-1-a는 컴파일은 됩니다. 하지만 실행이 안됩니다. 여기도 마찬가지로 보면..약간 어색한 구석이 있습니다.

파일 중간을 보면

doClick ? $.__views.button – 1 – a.on(“click”, doClick) : __defers["$.__views.button-1-a!click!doClick"] = !0;

보시듯 공백이 들어가는 듯 합니다만 확실치는 않네요…^^

버튼 말고 다른 UI도 동일한듯 싶습니다.

제가 scrollView 에 imageView로 몇개 유튜브 이미지를 붙이고, id값에 동영상 키값을 줬더니만…

어떤 경우엔 뷰가 실행이 되고, 어떤 경우엔 안되는거에요… 알고보니..

tIcSa-p5dmg 이런 값이 들어갔더라구요..그래서 뷰 3개중 저게 포함될때는 실행이 안됬던겁니다.

컴파일 시 에러가 안나니 원인을 못찾아서…그래 시간보내다 혹시나 해서 몇가지 해보다 알게된 내용입니다만…

아마 예상으론 common.js 방식일땐 문제가 없을거 같고… 쓸데없이 화면 그린다고만 안하면 문제는 없을듯..-.-

데이타 바인딩 형태로 하실때는 그냥 커스텀으로 어트리뷰트 작성하시면 JSON.stringify(e.source.어트리뷰트)) 이런식으로 읽어 오실수 있으니

궂이 id나 기타 기본 프로퍼티(어트리뷰트)에 값 주고 그럴 필요는 없었던 건데 습관적으로다 … ^^

 

수고하세요~

괜찮으시다면 코드를 첨부해주세요. 어떤 상황인지 잘 모르겠어요^^