1

我正在尝试在最新的 BlackBerry 10 平台中构建自定义按钮。

该按钮应在单击时更改背景图像,然后在第二次单击时将其更改回

按钮逻辑相当简单:单击后,我检查按钮中当前图像的类型并更改图像源。

我从一个基本的 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 解决方案,并找到了以下信息:

谢谢。

4

2 回答 2

3

在 QML 中,QString 实例似乎是一个普通的 JavaScript 字符串。此映射是自动完成的。并且 Javascript 字符串没有endsWith方法。您可以使用search带有正则表达式的方法来实现相同的目的。

if (source.search(/image\.png$/ !== -1) { /* ... */ }
于 2012-11-22T08:03:07.133 回答
0

我认为您可以使用属性创建更简单的方法

例如:

Control{
 id : myControl
 property bool state
 ImageButton{
  defaultImageSource : state ? "firstImageAsset.png" : "secondImageAsset.png"
  onClick :{
    myControl.state = !myControl.state
  } 
 }
}
于 2012-11-22T08:03:39.047 回答