有一個問題的自包含例如:滑塊元件保持目標值復位爲滑塊的最小值
Rectangle {
id: rect
width: 200
height: 200
property real v : 50
onVChanged: console.log(v)
Button {
onClicked: scomp.createObject(rect)
}
Component {
id: scomp
Rectangle {
id: sli
anchors.fill: parent
Column {
Slider {
width: 200
minimumValue: 10
maximumValue: 100
value: rect.v
onValueChanged: rect.v = value
}
Button {
onClicked: sli.destroy()
}
}
}
}
}
基本上,每個時間滑塊組件被創建修改v
它它設置於滑塊的最小值。請注意,滑塊仍能正確工作以修改該值,並且在滑塊關閉後v
將保持其適當的值,但在再次打開該滑塊時,該值再次損壞。
爲什麼會發生這種情況,如何預防呢?似乎由於某些可解釋的原因,滑塊的value
屬性暫時假定其值爲minimumValue
,但這看起來不夠恰當。也許是一個錯誤?即使在設置最小值之前移動了value: rect.v
,滑塊也不會真正採用正確的初始值。
根本不應該依賴'valueChanged',因爲每次更改值時都會調用所有其他處理程序,甚至是初始分配。糟糕的設計選擇?你可以爭論,但目前它是如何工作的。而是將該值綁定到滑塊值:該值使用滑塊進行更新。類似[this](http://pastebin.com/raw/62cXrMqz)。 – BaCaRoZzo
@BaCaRoZzo你的代碼是荒謬的,很明顯滑塊在調整後被破壞,將目標值綁定到滑塊值是對問題最糟糕的可能「解決方案」,實際上甚至沒有解決方案。如果滑塊已正確實現,則將滑塊值設置爲目標值將不會循環回目標值,因爲該值相同。滑塊中存在寄生值變化,是的,寄生非預期行爲是不好的設計。正是這種糟糕的設計阻止了組件以最清潔和最合乎邏輯的方式被使用。 – IvanB
不考慮功能,你的解決方案實際上建議將數據綁定到UI,這本身就是非常糟糕的設計。 UI綁定到數據,數據不應該依賴於UI。 UI隨需而變,可視化或與數據交互。 – IvanB