Data binding 什么是装订?

Data binding 什么是装订?,data-binding,backbone.js,binding,ember.js,cocoa-bindings,Data Binding,Backbone.js,Binding,Ember.js,Cocoa Bindings,我最近越来越多地看到术语“绑定”和“动态绑定”,特别是在像Ember.js、Can.js、Knockout.js和Backbone.js这样的JavaScript框架中,更传统的是在Cocoa和Objective-C中,我想知道绑定到底是什么?(什么是“活绑定”?) 从松散的意义上看,我们可以“将a绑定到B”,然后我们可以说,“a绑定到B”,这意味着B中的更改将自动反映在a中,用户无需担心必须设置观察者,但观察者会在较早时自动设置,并在B更改时自动通知 当我们这样做的时候,我们正在创造一个“绑定

我最近越来越多地看到术语“绑定”和“动态绑定”,特别是在像Ember.js、Can.js、Knockout.js和Backbone.js这样的JavaScript框架中,更传统的是在Cocoa和Objective-C中,我想知道绑定到底是什么?(什么是“活绑定”?)

从松散的意义上看,我们可以“将a绑定到B”,然后我们可以说,“a绑定到B”,这意味着B中的更改将自动反映在a中,用户无需担心必须设置观察者,但观察者会在较早时自动设置,并在B更改时自动通知

当我们这样做的时候,我们正在创造一个“绑定”

从更严格的意义上讲,Cocoa和Objective-C似乎是这样定义的:绑定是对象a的属性
foo
,该属性观察并更改为对象B的属性
的值。它是如何发生的,我们不在乎,它应该被隐藏(像一个黑匣子),通常它是通过观察者模式实现的。所以“binding”这个词实际上是指一个“属性”,而不是一个动作——这个属性观察并被更改为与另一个属性相同的值

这种绑定并不局限于绑定到数据的UI元素。它可以是一个外部的、较大的UI元素,其中包含一个较小的UI元素,并且外部UI元素具有一个绑定到内部UI元素属性的属性。或者,它可以是绑定到另一个非UI数据属性的一个非UI数据属性


这就是装订吗?那么动态绑定呢?

我不确定历史,但我猜术语“绑定”在这个意义上是从术语“数据绑定”衍生而来的。“数据绑定”实际上是一个动作:它用实际数据的值填充UI控件,也称为模型,例如,当表单中的字段被数据库中的数据填充并自动更新时,使用您提到的观察者模式。我认为绑定的主要区别在于单向和双向:在双向数据绑定中,用户输入也会同步回模型,而不是只从模型同步到视图

“绑定”是一个动词,“数据绑定”的动词形式是“绑定数据”或“执行数据绑定”。第二个示例说明“数据绑定”也是一个名词,可以定义为“将数据/模型属性绑定到UI/视图属性的行为”。关于名词形式的“binding”本身,我认为你是对的,它通常指两个属性之间的单独绑定。为了直观地演示这一点,假设点表示两个相互绑定的属性:

•-----

这里的“约束”是它们之间的界线

为了更具体,单向绑定可以用一个箭头表示:

•-->

和带有两个箭头的双向装订:

••

“活动绑定”是一个术语,它只是用来表示正在使用观察者模式。我的猜测是,区分“实时绑定”的愿望可能来自web开发人员,他们以前使用的框架中,在第一次加载页面时,每个HTTP请求只发生一次数据绑定。现在,大量使用Javascript的web应用已经成为常态(部分归功于ajax),没有理由不使用MVC最初定义所建议的观察者模式,因此对于RIA或本机桌面或移动应用来说,“实时绑定”可能是一个不必要的术语

另一方面,Trygve Reenskagug对MVC的最初设想(他发明了MVC)基本上是关于在系统中反映最终用户的心理模型,因此“模型”几乎是用户直接操纵的东西(或者至少是用户感觉到的)。因此,观察者模式(或者至少是一些保持模型和视图同步而不重新加载页面的机制)对它来说是至关重要的,而在服务器端拥有大部分代码的web开发框架并不是最初设想的真正的MVC,而是在代码组织方面遵循相同总体思想的变体。主要用于客户端应用程序的现代Javascript框架使真正的MVC用于web开发成为可能

回到你在问题中提到的一点,我认为你说绑定不一定只是模型属性和视图属性之间的绑定也是正确的;它可以在两个模型属性之间(通常在不同的模型上),也可以在两个视图属性之间。但我不同意你的说法,即“binding”只是一个与编程有关的名词——显然在英语中,它是动词“bind”的名词形式,换句话说是“binding的行为”,我认为这在编程中也是一个有效的用法。所以本质上我是说它有双重含义,但我认为你提出的定义是最常见的。以下是我对正式定义的尝试:

绑定。

  • 两个属性(通常在两个不同的对象中)之间的连接,使属性彼此保持同步,即具有相同的值。同步可以是单向的,也可以是双向的
  • 建立这种联系的行为

  • 绑定在一个非常简单的意义上意味着链接,假设你有一个进度条和一个变量X,每次点击一个按钮,X的值就会增加。使用绑定,您可以获取X的值(每次递增)并在进度条上显示它。在C#中的以下代码行中,“pb”是progressbar,TapCount是保存总抽头的变量。它显示“pb”的值已绑定到变量TapCount

    public void tapping
    {    
     pb.Value = TapCount; 
    }
    

    它与普通javascript中最初使用的.bind方法没有什么不同:将对象的范围绑定到方法

    考虑
    this.iterable.map
    
    <div id="temp_value"> 77 °F </div>