想一下在 Java 中,我們如何用觀察者模式來讓視圖反映模型的變化的?觀察者,被觀察者,注冊監聽器,事件,回調,獲取數據,等等是不是很麻煩?
有了綁定,我們可以直接將觀察者的某個屬性和被觀察者的某個屬性綁到一塊,同步變化,省了中間很多步驟,下面的例子,我將一個圓的透明度和一個文本的值與一個滑塊的值綁定到一塊。看看在瀏覽器里運行時什么效果(注意:需要 Java 插件,否則看不到效果)(下載到本機):
//一個滑塊
var slider = SwingSlider {
minimum: 0
maximum: 100
value: 80
vertical: false
};
//主窗體
Stage {
title: "MyApp"
scene: Scene {
width: 200
height: 200
content: [
VBox{
spacing: 10
content: [
//加入滑塊
slider,
//加入一個圓
Circle {
centerX: 100
centerY: 50
radius: 40
fill: Color.RED
//將透明度和滑塊的值綁定
opacity: bind {
slider.value / 100.0
}
},
//加入一個文本
Text {
font: Font {
size: 24
}
x: 10,
y: 30
// 將文本內容和滑塊的值綁定
content: bind "{slider.value}"
}
]
}
]
}
};
bind 不但可以綁定到變量,還可以綁定到表達式,函數等等,還可以雙向綁定。
至于觸發器,個人感覺類似于一個 Setter ,在你給一個變量賦值的時候,同時做一些額外的事情,因為你用一個字面量的方式創建一個對象的時候,不可能去調用任何函數,設置這個語言特性可能更多的是考慮這一點吧。
了解更多:
邊蓬的 JFX 入門
官方教程
官方 GUI 教程
語言參考