【问题标题】:Prime examples of data-binding数据绑定的主要示例
【发布时间】:2010-09-09 01:29:09
【问题描述】:

我正在用 JavaScript 实现一个准系统框架,它只提供对象之间的数据绑定。数据绑定可以是单向或双向的,并且可能在某个属性上绑定多个对象。有几种可用于各种语言的数据绑定解决方案,我正在努力了解世界上最好的东西,以便从中挑选功能集。到目前为止,我已经研究了以下提供绑定的框架:

如果缺少支持绑定的框架,请随时编辑问题并添加其他框架。

在您选择的各自框架中,您认为哪些数据绑定功能非常有价值?该框架的目标是尽可能多地消除胶水代码。另外,是否有任何关于该主题的研究论文可供我阅读?

【问题讨论】:

  • jQuery 数据链接实际上只是一个糟糕的 $ 包装器,它围绕着 ASP.NET AJAX 的 Sys.BindingSys.Observable(在 v4.0 中出现)的强大功能。关于 SO 的讨论不多。这是我找到的一个例子:stackoverflow.com/questions/1500942/…
  • jQXB 似乎完全符合您的需要。双向数据绑定,支持复合模式,与服务器进行数据交换

标签: javascript wpf apache-flex data-binding key-value-observing


【解决方案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

其实这个特性是从tcl语言本身通过trace命令衍生出来的:

# 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 的方式对我来说是最自然的。

【讨论】:

  • Mozilla 已经实现了Object.watch,我认为这是在 JavaScript 中自动实现绑定的有用方法。但是Tk toolkit 采用的方法,tcl 看起来很优雅。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 2022-09-30
  • 2012-10-19
  • 2019-05-22
  • 2010-10-11
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多