用于与js进行双向数据绑定的最有用的技术

时间:2011-01-08 07:36:53

标签: javascript html

随着jQuery和喜欢的大量Web服务和客户端模板功能,创建mashup或网站消耗大量Web服务并将数据发布回这些服务变得非常流行。对于具有这种体系结构的适当大小的页面,请说一个仪表板。维护此客户端状态的有用技巧是什么?换句话说,什么是进行双向数据绑定的一些方法? 示例场景:

  1. 从服务获取数据为JSON / XML
  2. 在UI上显示/绑定
  3. 捕获用户输入
  4. 从UI控件/ html
  5. 重新创建请求
  6. 将数据发布到服务
  7. 获取回复并重新绑定

3 个答案:

答案 0 :(得分:4)

在jQuery中,您可以轻松地执行调用服务的页面加载的AJAX请求,返回一个对象,并使用jQuery Templates插件将该对象绑定到表单。当需要提交表单时,您可以使用jQuery Form插件通过AJAX发送到服务并返回JSON对象,将其绑定到jQuery Templates插件容器(表单)。


另外,您可以结合使用jQuery“Form”插件发送表单,以及KnockOut JavaScript库,这些都是您想要做的绑定类型。

请参阅http://knockoutjs.com/

上的敲除JS库详细信息

其中列出的前两个功能包括:

  • Declerative Bindings
  • 自动UI刷新

请参阅此实例,了解非常小的介绍http://knockoutjs.com/examples/helloWorld.html


<强>更新

由于这个答案得到了最近的推特,所以提到镇上相对较新的孩子,angularJS也很重要,它是一个更大的框架,可以做很多事情,但做双向数据绑定是最简单的事情。

官方网址:http://angularjs.org

示例:http://docs.angularjs.org/guide/forms

  

http://gurustop.net

答案 1 :(得分:3)

Angular是我见过的最令人印象深刻的双向数据绑定播放器。您可以使用普通的旧JavaScript对象,将它们附加到Angular范围对象,然后将范围绑定到DOM的一部分。这是Angular 0.9的一个例子。 (Angular 1.0使用非常不同的API来实现相同的功能。)

// angular.compile() returns a databinding function
var databind = angular.compile(document.documentElement);
var model = angular.scope();

// add data to the scope object
model.greeting = "Hello, World!";
model.colors = ["red", "green", "blue"];

// hook 'em up
databind(model);

您可以在HTML中使用角度表达式进行数据绑定,包括表单控件。

<!DOCTYPE html>
<input name="greeting" />
<span ng:repeat="color in colors" style="color: {{color}}">
  {{color}}
</span>

在这种情况下,范围对象的greeting属性会随着文本框中的每次击键而更新。

或者,如果您不想在HTML中使用数据绑定表达式,则可以手动执行所有操作。

model.$watch("greeting", function (value) {
  // when the greeting changes, update the DOM
  $("input[name=greeting]").val(value);
});

然后每次更新范围对象并调用$ eval()时,如果有任何更改,将通知侦听器。

model.greeting = "Hi.";
model.$eval();

最好的部分是你可以对附加到作用域的任何内容进行更改,调用它的$ eval()方法,并且HTML会自动更新。

model.colors.append("yellow");
model.colors.sort();
model.$eval(); // notifies listeners, including bound HTML

Knockout JS不如,因为您不必使用纯JavaScript对象,数组,字符串和数字,而必须创建其ObservableObservableArray类的实例数据绑定。

享受!

答案 2 :(得分:1)

我会看看Lava JS(http://lava.codeplex.com)。它具有非常好的数据绑定,使用起来非常不引人注目。它还支持获取/发布数据到服务器。