<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      Knockout應用開發指南 第六章:加載或保存JSON數據

      2011-11-28 09:02  湯姆大叔  閱讀(27191)  評論(3)    收藏  舉報

      加載或保存JSON數據

      Knockout可以實現很復雜的客戶端交互,但是幾乎所有的web應用程序都要和服務器端交換數據(至少為了本地存儲需要序列化數據),交換數據最方便的就是使用JSON格式 – 大多數的Ajax應用程序也是使用這種格式。

       

      加載或保存數據

      Knockout不限制你用任何技術加載和保存數據。你可以使用任何技術和服務器來交互。用的最多的是使用jQuery的Ajax幫助,例如:getJSON,post和ajax。你可以通過這些方法從服務器端獲取數據:

      $.getJSON("/some/url", function (data) {
      // Now use this data to update your view models,
      // and Knockout will update your UI automatically
      })

      … 或者向服務器端發送數據:

      var data = /* Your data in JSON format - see below */;
      $.post("/some/url", data, function(returnedData) {
      // This callback is executed if the post was successful
      })

      或者,如果你不想用jQuery,你可以用任何其它的方式來讀取或保存JSON數據。所以, Knockout需要你做的僅僅是:

          對于保存,讓你的view model數據轉換成簡單的JSON格式,以方便使用上面的技術來保存數據。

          對于加載,更新你接收到的數據到你的view model上。

       

      轉化View Model數據到JSON格式

      由于view model都是JavaScript對象,所以你需要使用標準的JSON序列化工具讓轉化view model為JSON格式。例如,可以使用JSON.serialize()(新版本瀏覽器才支持的原生方法),或者使用json2.js類庫。不過你的view model可能包括observables,依賴對象dependent observables和observable數組,有可能不能很好的序列化,你需要自己額外的處理一下數據。

       

      為了使view model數據序列化方便(包括序列化observables等格式),Knockout提供了2個幫助函數:

      •     ko.toJS — 克隆你的view model對象,并且替換所有的observable 對象為當前的值,這樣你可以得到一個干凈的和Knockout無關的數據copy。
      •     ko.toJSON — 將view model對象轉化成JSON字符串。原理就是:先調在view model上調用ko.toJS,然后調用瀏覽器原生的JSON 序列化器得到結果。注:一些老瀏覽器版本不支持原生的JSON 序列化器(例如:IE7和以前的版本),你需要引用json2.js類庫。

       

      聲明一個view model:

      var viewModel = {
      firstName: ko.observable("Bert"),
      lastName: ko.observable("Smith"),
      pets: ko.observableArray(["Cat", "Dog", "Fish"]),
      type: "Customer"
      };

      viewModel.hasALotOfPets = ko.dependentObservable(function () {
      return this.pets().length > 2
      }, viewModel)

      該view model包含observable類型的值,依賴類型的值dependent observable以及依賴數組observable array,和普通對象。你可以像如下代碼一樣使用ko.toJSON將此轉化成服務器端使用的JSON 字符串:

      var jsonData = ko.toJSON(viewModel);

      // Result: jsonData is now a string equal to the following value
      //
      '{"firstName":"Bert","lastName":"Smith","pets":["Cat","Dog","Fish"],"type":"Customer","hasALotOfPets":true}'

      或者,序列化之前,你想得到JavaScript簡單對象的話,直接使用像這樣一樣使用ko.toJS:

      var plainJs = ko.toJS(viewModel);

      // Result: plainJS is now a plain JavaScript object in which nothing is observable. It's just data.
      //
      The object is equivalent to the following:
      //
      {
      //
      firstName: "Bert",
      //
      lastName: "Smith",
      //
      pets: ["Cat","Dog","Fish"],
      //
      type: "Customer",
      //
      hasALotOfPets: true
      //
      }

       

      使用JSON更新View Model數據

      如果你從服務器端獲取數據并且更新到view model上,最簡單的方式是自己實現。例如,

      // Load and parse the JSON
      var someJSON = /* Omitted: fetch it from the server however you want */;
      var parsed = JSON.parse(someJSON);

      // Update view model properties
      viewModel.firstName(parsed.firstName);
      viewModel.pets(parsed.pets);

      很多情況下,最直接的方法就是最簡單而且最靈活的方式。當然,如果你更新了view model的屬性,Knockout會自動幫你更新相關的UI元素的。

       

      不過,很多開發人員還是喜歡使用一種好用而不是每次都寫代碼的方式來轉化數據到view model上,尤其是view model有很多屬性或者嵌套的數據結構的時候,這很有用,因為可以節約很多代碼量。knockout.mapping插件可以幫你做到這一點。

      主站蜘蛛池模板: 国产成人综合亚洲欧美日韩| 日本一区二区不卡精品| 中文字幕人妻中出制服诱惑| 在线精品国精品国产不卡| 极品少妇无套内射视频| 久久久久香蕉国产线看观看伊| 久久香蕉国产线看观看猫咪av| 久久精品亚洲成在人线av麻豆| 国产精品福利自产拍在线观看| 国产av中文字幕精品| 贞丰县| 一区二区三区午夜无码视频| 亚洲AV成人一区国产精品| 高中女无套中出17p| 亚洲综合国产精品第一页| 91在线国内在线播放老师| 国产成人高清亚洲综合| 99精品热在线在线观看视| 人妻系列无码专区69影院| 综合色一色综合久久网| 进贤县| 99国产精品自在自在久久| 一区二区亚洲精品国产精华液| 久草热大美女黄色片免费看| 国产 另类 在线 欧美日韩 | 边添小泬边狠狠躁视频| 无码中文字幕热热久久| 天堂av在线一区二区| 色翁荡息又大又硬又粗又视频图片 | 亚洲成a人片在线观看中| 一本大道久久香蕉成人网| 亚洲综合国产伊人五月婷| 中国CHINA体内裑精亚洲日本 | 国产a在视频线精品视频下载| 疯狂做受XXXX高潮国产| 国产午夜福利免费入口| 亚洲精品tv久久久久久久久久 | 国产成人啪精品午夜网站| ww污污污网站在线看com| 99亚洲男女激情在线观看| 午夜射精日本三级|