前言

Knockout可以实现充分复杂的客户端交互,但是几乎拥有的web应用程序都设与劳务器端交换数据(至少为本地存储需要序列化数据),交换数据最有利的就是是下JSON格式
– 大多数的Ajax应用程序也是采取这种格式。

加载或保存数据

Knockout不限定而用外技术加载与保留数据。你可采取任何技术和服务器来互。用的卓绝多之是运jQuery的Ajax帮助,例如:getJSON,post和ajax。你可透过这些措施从服务器端获取数据:

$.getJSON("/some/url", function (data) {
   ///可以使用Data来更新ViewModel,并且通过Ko来更新UI元素 
};

要么向劳动器端发送数据:

var data = {} ;   /////JSON数据格式的data
$.post("/some/url", data, function(returnedData) {
    ////如果向服务端发送数据成功,那么此回调函数就会被执行
})

或者,如果你无思就此jQuery,你得就此另外其他的法来读取或保存JSON数据。所以,Knockout需要你做的光是:

    对于保留,让你的view
model数据易成为简单的JSON格式,以方便使用上面的艺来保存数据。

    对于加载,更新您收到至的数量到您的view model上。

转化ViewModel数据到JSON格式

是因为view
model都是JavaScript对象,所以若需要动用正规的JSON序列化工具被转账view
model为JSON格式。例如,可以使JSON.serialize()(新本子浏览器才支撑之原生方法),或者利用json2.js类库。不过你的view
model可能包括observables,依赖对象dependent
observables和observable数组,有或不能够充分好之序列化,你得协调额外的拍卖一下数目。

为要view
model数据序列化方便(包括序列化observables等格式),Knockout提供了2单援助函数:

  1.ko.toJS — 仿制你的view model对象,并且替换所有的observable
对象也目前底价值,这样你可以获得一个清之同Knockout无关的多少copy。

  2.ko.toJSON — 以view model对象转化成JSON字符串。原理就是是:先调在view
model上调用ko.toJS,然后调用浏览器原生的JSON
序列化器得到结果。注:一些老浏览器版本不支持原生的JSON
序列化器(例如:IE7和以前的本子),你需要引用json2.js类库。

宣称一个view model:

jQuery 1

<script type="text/javascript">
    var viewModel = {
        firstName: ko.observable("Aehyok"),
        lastName: ko.observable("Leo"),
        pets: ko.observableArray(["Dog", "Cat", "Fish"]),
        Type:"Customer"
    };

    view.hasALotOfPets = ko.dependentObservable(function () {
        return this.pets().length() > 2;
    }, viewModel);
    ko.applyBindings(viewModel);
</script>

jQuery 2

欠view model包含observable类型的价,依赖型的值dependent
observable以及借助数组observable
array,和平常对象。你可像如下代码一样采用ko.toJSON将是转化成为服务器端使用的JSON
字符串:

    var jsonData = ko.toJSON(viewModel);
    alert(jsonData);

返回的JSON数据为

jQuery 3

或者,序列化之前,你想取JavaScript简单对象的口舌,直接以如这样同样采用ko.toJS:

var plainJs = ko.toJS(viewModel);

返回的JavaScript对象为

jQuery 4

使用JSON更新ViewModel数据

一经您自劳动器端获取数据并且更新到view
model上,最简单易行的方式是协调实现。例如

    var someJSON = '{ "firstName": "Aehyok1","lastName": "Leo1"}';
    var parsed = JSON.parse(someJSON);
    debugger;
    viewModel.firstName(parsed.firstName);

预先看之前的价

jQuery 5

推行下

jQuery 6

无数情下,最直接的主意就是是极其简易以太灵敏的法门。当然,如果你更新了view
model的性质,Knockout会自动帮您更新相关的UI元素的。

只是,很多开发人员还是爱下同一栽好用要无是每次都勾代码的不二法门来转化数据到view
model上,尤其是view
model有为数不少性质或者嵌套的数据结构的时光,这万分有因此,因为可以节约很多代码量。knockout.mapping插件可以助你完成即一点。

相关文章

网站地图xml地图