2012-11-21 3 views
1

최신 BlackBerry 10 플랫폼에서 사용자 정의 버튼을 제작하려고합니다.BlackBerry Cascades의 QML 문자열

버튼을 클릭하면 배경 이미지가 변경되고 두 번째 클릭하면 다시 변경됩니다..

버튼 로직은 매우 간단합니다. 버튼을 클릭하면 현재 버튼에있는 이미지 유형을 확인하고 이미지 소스를 변경합니다.

나는 다음과 같습니다 기본 QML 사용자 정의 컨트롤 (레이블 및 기타 중요하지 않은 것들을 제거) 시작 :

import bb.cascades 1.0 

Container 
{ 

    id: root 
    layout: DockLayout 
    { 
    } 

    function clickMe() 
    { 
     var source = myImage.defaultImageSource.toString(); 

     console.log(source); 

     if (source.endsWith("image.png")) 
     { 
      myImage.defaultImageSource = "asset:///images/image_pushed.png"; 
     } 
     else 
     { 
      myImage.defaultImageSource = "asset:///images/image.png"; 
     } 
    } 

    ImageButton 
    { 
     id: myImage 
     defaultImageSource: "asset:///images/image.png" 
    } 

    onCreationCompleted: 
    { 
     myImage.clicked.connect(root.clickMe); 
    } 
} 

하여 ImageButton 클릭 이벤트는 자바 스크립트 기능 clickMe에 연결되어 있습니다. 함수가 실행되고 URL이 콘솔에 올바르게 기록됩니다.

image_pushed.png가 설정되지 않기 때문에 문제는 IF 절입니다. 왜 이것이 문제이며 어떻게이 버튼을 구현할 수 있습니까?

나는이 문제에 대한 만 QML 솔루션 주위를 찾고 있어요 나는이 정보를 발견

감사합니다.

답변

3

QML 내 QString 인스턴스는 정상적인 JavaScript 문자열로 나타납니다. 이 매핑은 자동으로 수행됩니다. 자바 스크립트 문자열에는 endsWith 메소드가 없습니다. search 메서드를 정규식과 함께 사용하여 동일한 결과를 얻을 수 있습니다.

if (source.search(/image\.png$/ !== -1) { /* ... */ } 
+0

QML QString 인스턴스가 JS 문자열로 캐스팅하는 경우 endsWith 방법이 존재하지 않는, 그 이유는 설명 할 수 . 그러나 JS 문자열에는 실제로 substring 및 substr 메서드가 있지만이 경우에는 작동하지 않습니다 (이 문제를 해결하기위한 첫 번째 시도였습니다). – Legoless

+0

언급하는 방법은 소문자로 시작합니다. 또한 그 문제에서'console.log (typeof (source))'의 출력을 확인함으로써 확실히 할 수 있습니다. 'string'이라고 말하면 실제로 JS 문자열입니다. – sebasgo

+0

나는 더 많은 테스트를 거쳤다 고 말해야하는데, 실제로 이것을 당신의 개념과 함께 작동하게 만들었습니다. 고맙습니다, 당신 말이 맞습니다, JS 문자열은 QString이 아니라 사용됩니다. – Legoless

0

난 당신이 예를 들어 부동산

를 사용하여 더 간단한 방법을 만들 수 있다고 생각 :

Control{ 
id : myControl 
property bool state 
ImageButton{ 
    defaultImageSource : state ? "firstImageAsset.png" : "secondImageAsset.png" 
    onClick :{ 
    myControl.state = !myControl.state 
    } 
} 
} 
+0

이것은 이미 버튼을 구현 한 방법입니다. 그러나 나는 아직도 궁금해하고 있는데, 왜 제안 된 방법이 효과가 없습니까? – Legoless

+0

넵, 나는 @sebasgo와 같다고 생각합니다. 자바 스크립트 문자열에는 자바와 같은 endsWith 메서드가 없습니다. – hakim

+0

다른 답변에 주석을 달았습니다. 자바 스크립트 문자열로 시도했지만 substring 및 substr 메서드도 작동하지 않습니다. – Legoless

관련 문제