我正在嘗試在最新的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解決對於這個問題,我發現這樣的信息:
- 的defaultImageSource屬性的類型是QUrl,這確實包含 toString()方法的。
- toString()方法返回QString,它確實有函數endsWith。
- 我QML參考:http://qt-project.org/doc/qt-4.8/qstring.html#endsWith
感謝。
如果QML QString的情況下被強制轉換爲JS字符串,這將解釋爲什麼的endsWith方法不存在。但JS字符串確實有Substring和Substr方法,在這種情況下不起作用(這是我第一次嘗試解決這個問題)。 – Legoless
您提到的方法以小寫字母開頭。你也可以通過檢查'console.log(typeof(source))'的輸出來確定這個問題。如果它說'串'它真的是一個JS字符串。 – sebasgo
我必須說我經歷了更多的測試,而且我實際上是在與您的概念一起工作。謝謝,你說得對,使用JS字符串,而不是QString。 – Legoless