具体到底是什么?

nop*_*ole 16 data-binding binding cocoa-bindings backbone.js ember.js

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

似乎从松散的意义上说,我们可以"绑定A到B",然后我们可以说,"A绑定到B",这意味着B中的更改将自动反映在A中 - 无需用户担心必须设置一个观察者,但观察者会自动设置,并在B更改时自动通知.

当我们这样做时,我们正在创造一种"约束力".

从更严格的意义上说,似乎Cocoa和Objective-C定义它是这样的:绑定是对象A 的属性 foo,并且此属性观察并更改为bar对象B 的属性值.如何发生,我们不要小心,它应该被隐藏(如黑盒子),通常它是由观察者模式实现的.所以"绑定"这个词实际上意味着一个"属性",而不是一个动作 - 这个属性观察并变为与其他属性相同的值.

此绑定不仅限于绑定到数据的UI元素.它可以是包含较小UI元素的外部较大UI元素,外部UI元素具有绑定到内部UI元素属性的属性.或者它可以是绑定到另一个非UI数据属性的一个非UI数据属性.

这到底是什么绑定吗?那么活动绑定呢?

Mat*_*wne 1

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

\n\n

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

\n\n

\xe2\x80\xa2 ----- \xe2\x80\xa2

\n\n

这里的“绑定”是它们之间的界线。

\n\n

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

\n\n

\xe2\x80\xa2 ----> \xe2\x80\xa2

\n\n

以及带有两个箭头的双向绑定:

\n\n

\xe2\x80\xa2 <---> \xe2\x80\xa2

\n\n

“实时绑定”这个术语仅用于指示正​​在使用观察者模式。我的猜测是,区分“实时绑定”的愿望可能来自于以前使用过框架的 Web 开发人员,在这些框架中,当页面首次加载时,每个 HTTP 请求只发生一次数据绑定。现在,大量 Javascript 的 Web 应用程序正在成为常态(部分归功于 ajax),没有理由不使用 MVC 原始定义所建议的观察者模式,因此“实时绑定”可能是一个不必要的术语关于 RIA 或本机桌面或移动应用程序。

\n\n

顺便说一句,Trygve Reenskaug 最初的 MVC 愿景(他发明了它)从根本上讲是在系统中反映最终用户的心智模型,以便“模型”是用户几乎可以直接操纵的东西(或至少用户有这样的感觉)。因此,观察者模式(或者至少是一些在不重新加载页面的情况下保持模型和视图同步的机制)对其至关重要,并且大部分代码位于服务器端的 Web 开发框架并不是真正的 MVC 最初构想的而是在代码组织方面遵循相同总体思路的变体。主要用于客户端应用程序的现代 Javascript 框架使真正的 MVC 成为 Web 开发的可能。

\n\n

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

\n\n

捆绑。

\n\n
    \n
  1. 两个属性(通常在两个不同对象中)之间的连接,使属性彼此保持同步,即具有相同的值。同步可以是单向的,也可以是双向的。
  2. \n
  3. 启动此类连接的行为。
  4. \n
\n

  • 您能否回答您自己的问题,或者接受马特的上述答案(我认为非常好)...以便将此问题从此处的“未回答的问题”部分中删除?谢谢!:) (2认同)