为什么';当我的QML属性绑定到Slider.value属性时,它是否会更新?

为什么';当我的QML属性绑定到Slider.value属性时,它是否会更新?,qml,blackberry-10,blackberry-cascades,Qml,Blackberry 10,Blackberry Cascades,我有一个QML文档,其中有一个int属性、一个滑块和一个按钮。我希望x始终具有与Slider.value相同的值。这是我的QML: Page { property int x: 1 content: Container { Slider { fromValue: 1 toValue: 500 value: x onValueChanged: {

我有一个QML文档,其中有一个
int属性
、一个
滑块
和一个
按钮
。我希望
x
始终具有与
Slider.value
相同的值。这是我的QML:

Page {
    property int x: 1

    content: Container {
        Slider {
            fromValue: 1
            toValue: 500
            value: x
            onValueChanged: {
                console.log("Slider value is: "+value);
                console.log("x value: "+x);  
            }
        }
        Button {
            text: "Increment x"
            onClicked: {
                x=x+10;
            }
        }
    }
}
当我按下按钮时,滑块值被更新,
x
被更新。但是当我移动滑块时,
x
的值不会更新。当我移动滑块时,
x
的值为什么没有改变

试试这个:

Page {
property int x: **sliderID.value**

content: Container {
    Slider {
        **id: sliderID**
        fromValue: 1
        toValue: 500
        value: x
        onValueChanged: {
            console.log("Slider value is: "+value);
            console.log("x value: "+x);  
        }
    }
    Button {
        text: "Increment x"
        onClicked: {
            x=x+10;
        }
    }
}
}


我建立了双向绑定。

因为您的
x
未绑定到
滑块。值
。当您将
Slider.value
绑定到
x
时,如果
x
更改,
Slider.value
也将更改,但如果
Slider.value
更改(当您滑动它时),
x
值将不会更改

要解决此问题,可以使用


使用onImmediateValueChanged信号而不是onValueChanged

...
onImmediateValueChanged: {
    console.log("Slider value is: "+value);
    console.log("x value: "+x);  
}
...

不幸的是,在beta 4上,我得到了错误:
main.qml:4:1:qml bb::cascades::QmlPage_qml_0:Binding loop检测到属性“x”
当使用此方法时,它在更改滑块时工作正常,但当单击按钮时,
value
x
会得到不同的值(我仍然会收到“Binding loop detected”消息)1.非常感谢。这不是很理想,因为我实际上想要的是
int
类型的属性,而不是
real
类型的属性,这就是
slider.value
的含义。但这很容易解决。@donturner:你到底想达到什么目的?如果要在按下按钮时更改值(如上面的示例),只需直接更改
滑块.value
。Alias type主要用于将子对象的属性公开到顶层。我正在尝试使用滑块控制动画的速度,为此我需要一个整数值来指定动画的持续时间(毫秒)。我现在可以在Javascript中通过引用别名并将其转换为int来实现这一点。
...
onImmediateValueChanged: {
    console.log("Slider value is: "+value);
    console.log("x value: "+x);  
}
...