2012-11-21 47 views
1

我正在嘗試在最新的BlackBerry 10平臺中構建自定義按鈕。BlackBerry瀑布中的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單擊事件連接到JavaScript函數clickMe。該函數觸發並將URL記錄爲正確控制檯。

問題是IF子句,因爲image_pushed.png從不設置。爲什麼是這個問題,我該如何實現這個按鈕?

我四處尋找一個只QML解決對於這個問題,我發現這樣的信息:

感謝。

回答

3

在QML中QString實例看起來是一個普通的JavaScript字符串。這個映射是自動完成的。而Javascript字符串沒有endsWith方法。您可以使用正則表達式的search方法實現相同。

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

如果QML QString的情況下被強制轉換爲JS字符串,這將解釋爲什麼的endsWith方法不存在。但JS字符串確實有Substring和Substr方法,在這種情況下不起作用(這是我第一次嘗試解決這個問題)。 – Legoless

+0

您提到的方法以小寫字母開頭。你也可以通過檢查'console.log(typeof(source))'的輸出來確定這個問題。如果它說'串'它真的是一個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說,JavaScript字符串沒有endsWith方法像Java – hakim

+0

就像我對其他答案評論:我嘗試了JavaScript字符串的嘗試,但substring和substr方法也不工作。 – Legoless