我在JavaScript中实现了一个只提供对象之间数据绑定的准系统框架。数据绑定可以是单向或双向的,并且可能在某些属性上绑定多个对象。有几种数据绑定解决方案可用于各种语言,我正在努力了解所有世界中最好的,以便从中挑选功能集。到目前为止,我已经研究了以下提供绑定的框架:
请随意编辑问题并添加支持绑定的其他框架(如果缺少这些框架)。
您认为哪些数据绑定功能在您选择的相应框架中极具价值?该框架的目标是尽可能多地消除胶水代码。另外,有没有关于这个主题的研究论文我可以咀嚼?
答案 0 :(得分:1)
还要看看其中最古老的一个:Tk工具包(通常与tcl相关联,但也可以在其他语言中使用)。在Tk中,更新GUI中的值通常只需更新变量:
set foo "Hello" ;# just a simple variable
# Create a label widget displaying "Hello"
pack [label .l -textvariable foo]
# Now change "Hello" to "Goodbye"
set foo "Goodbye"
或者更为复杂的例子,10秒倒计时小部件:
set countdown 10
pack [label .count -textvariable countdown]
proc tick {} {
incr countdown -1
if {$countdown > 0} {
after 1000 tick
}
}
tick
实际上,该功能是通过trace命令从tcl语言本身派生出来的:
# A simple auto-incrementing variable:
set foo 0
proc autoIncrement {varname args} {
incr $varname
}
trace add variable foo read {autoIncrement foo}
# now every time foo is read it increments itself by 1
当然,您不能指望所有语言都具备此功能。您也可以使用setInterval()
通过轮询来模拟它。 Tk的做法让我觉得最自然。