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

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

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

      Knockout應(yīng)用開發(fā)指南 第八章:簡(jiǎn)單應(yīng)用舉例(1)

      2011-11-30 09:04  湯姆大叔  閱讀(25690)  評(píng)論(7)    收藏  舉報(bào)

      本章展示的4個(gè)例子主要是利用了Knockout的基本語法特性,讓大家感受到使用Kncokout的快感。

      1   Hello world

      這個(gè)例子里,2個(gè)輸入框都被綁定到data model上的observable變量上?!癴ull name”顯示的是一個(gè)dependent observable,它的值是前面2個(gè)輸入框的值合并一起的結(jié)果。

       

       無論哪個(gè)輸入框更新,都會(huì)看到“full name” 顯示結(jié)果都會(huì)自動(dòng)更新。查看HTML源代碼可以看到我們不需要聲明onchange事件。Knockout知道什么時(shí)候該更新UI。

       

      代碼: View

      <p>First name: <input data-bind="value: firstName"/></p>
      <p>Last name: <input data-bind="value: lastName"/></p>
      <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>

      代碼: View model

      // 這里是聲明的view model

      var viewModel = {
      firstName: ko.observable("Planet"),
      lastName: ko.observable("Earth")
      };

      viewModel.fullName = ko.dependentObservable(function () {
      // Knockout tracks dependencies automatically.
      //It knows that fullName depends on firstName and lastName,
      //because these get called when evaluating fullName.
      return viewModel.firstName() + " " + viewModel.lastName();
      });

      ko.applyBindings(viewModel); // This makes Knockout get to work


      2   Click counter

      這個(gè)例子展示的創(chuàng)建一個(gè)view model并且綁定各種綁定到HTML元素標(biāo)記上,以便展示和修改view model的狀態(tài)。

      Knockout根據(jù)依賴項(xiàng)。在內(nèi)部,hasClickedTooManyTimes在numberOfClicks上有個(gè)訂閱,以便當(dāng)numberOfClicks改變的時(shí)候,強(qiáng)制hasClickedTooManyTimes重新執(zhí)行。相似的,UI界面上多個(gè)地方引用hasClickedTooManyTimes,所以當(dāng)hasClickedTooManyTimes 改變的時(shí)候,也講導(dǎo)致UI界面更新。

      不需要手工聲明或者訂閱這些subscription訂閱,他們由KO框架自己創(chuàng)建和銷毀。參考如下代碼實(shí)現(xiàn):

       

       

      代碼: View

      <div>You've clicked <span data-bind="text: numberOfClicks">&nbsp;</span> times</div> 

      <button data-bind="click: registerClick, enable: !hasClickedTooManyTimes()">Click me</button>

      <div data-bind="visible: hasClickedTooManyTimes">
      That's too many clicks! Please stop before you wear out your fingers.
      <button data-bind="click: function() { numberOfClicks(0) }">Reset clicks</button>
      </div>

      代碼: View model

      var clickCounterViewModel = function () {
      this.numberOfClicks = ko.observable(0);

      this.registerClick = function () {
      this.numberOfClicks(this.numberOfClicks() + 1);
      }

      this.hasClickedTooManyTimes = ko.dependentObservable(function () {
      return this.numberOfClicks() >= 3;
      }, this);
      };

      ko.applyBindings(new clickCounterViewModel());


      3   Simple list

      這個(gè)例子展示的是綁定到數(shù)組上。

      注意到,只有當(dāng)你在輸入框里輸入一些值的時(shí)候,Add按鈕才可用。參考下面的HTML代碼是如何使用enable 綁定。

       

       

      代碼: View

      <form data-bind="submit: addItem">
      New item:
      <input data-bind='value: itemToAdd, valueUpdate: "afterkeydown"' />
      <button type="submit" data-bind="enable: itemToAdd().length > 0">Add</button>
      <p>Your items:</p>
      <select multiple="multiple" width="50" data-bind="options: items"> </select>
      </form>

      代碼: View model

      var viewModel = {};
      viewModel.items = ko.observableArray(["Alpha", "Beta", "Gamma"]);
      viewModel.itemToAdd = ko.observable("");
      viewModel.addItem = function () {
      if (viewModel.itemToAdd() != "") {
      viewModel.items.push(viewModel.itemToAdd());
      // Adds the item. Writing to the "items" observableArray causes any associated UI to update.

      viewModel.itemToAdd("");
      // Clears the text box, because it's bound to the "itemToAdd" observable
      }
      }

      ko.applyBindings(viewModel);


      4   Better list

      這個(gè)例子是在上個(gè)例子的基礎(chǔ)上添加remove item功能(multi-selection)和排序功能。 “remove”和“sort”按鈕在不能用的時(shí)候會(huì)變成disabled狀態(tài)(例如,沒有足夠的item來排序)。

      參考HTML代碼是如何實(shí)現(xiàn)這些功能的,另外這個(gè)例子也展示了如何使用匿名函數(shù)來實(shí)現(xiàn)排序。

       

       

      代碼: View

      <form data-bind="submit:addItem">
      Add item: <input type="text" data-bind='value:itemToAdd, valueUpdate: "afterkeydown"' />
      <button type="submit" data-bind="enable: itemToAdd().length > 0">Add</button>
      </form>

      <p>Your values:</p>
      <select multiple="multiple" height="5" data-bind="options:allItems, selectedOptions:selectedItems"> </select>

      <div>
      <button data-bind="click: removeSelected, enable: selectedItems().length > 0">Remove</button>
      <button data-bind="click: function() { allItems.sort() }, enable: allItems().length > 1">Sort</button>
      </div>

      代碼: View model

      // In this example, betterListModel is a class, and the view model is an instance of it.

      // See simpleList.html for an example of how to construct a view model without defining a class for it. Either technique works fine.

      var betterListModel = function () {
      this.itemToAdd = new ko.observable("");
      this.allItems = new ko.observableArray(["Fries", "Eggs Benedict", "Ham", "Cheese"]);

      // Initial items

      this.selectedItems = new ko.observableArray(["Ham"]);

      // Initial selection

      this.addItem = function () {
      if ((this.itemToAdd() != "") && (this.allItems.indexOf(this.itemToAdd()) < 0))
      // Prevent blanks and duplicates
      this.allItems.push(this.itemToAdd());
      this.itemToAdd(""); // Clear the text box
      }

      this.removeSelected = function () {
      this.allItems.removeAll(this.selectedItems());
      this.selectedItems([]); // Clear selection
      }
      };

      ko.applyBindings(new betterListModel());



      主站蜘蛛池模板: 国产亚洲AV电影院之毛片| 综合色在线| 日韩中文字幕人妻一区| 国产亚洲精品久久久久秋霞| 成人国产av精品免费网| 国产亚洲一在无在线观看| 精品国产一区二区三区四区| 国产成人av一区二区三区不卡| 九九热在线免费视频播放| 热久久美女精品天天吊色| 婷婷色综合成人成人网小说 | 最新亚洲av日韩av二区| 人妻有码av中文字幕久久琪| 国产av丝袜熟女一二三| 久久人人爽人人爽人人av| 岛国中文字幕一区二区| 天堂av在线一区二区| 国产综合视频一区二区三区| 中文字幕日韩国产精品| 免费无码一区无码东京热| 亚洲国产成人综合熟女| 最近中文字幕国产精选| 日本免费人成视频在线观看| 国产成人精品午夜二三区| 国产69精品久久久久99尤物| 国产区精品福利在线熟女| 成全影视大全在线观看| 中文字幕人妻丝袜美腿乱| 精品中文字幕人妻一二| 国产偷国产偷亚洲清高动态图| 亚洲熟妇熟女久久精品综合| 中文字幕结果国产精品| 久久久久久久无码高潮| 亚洲激情在线一区二区三区| 丰满无码人妻热妇无码区| 中文字幕人成乱码熟女| 蜜臀av色欲a片无人一区| 无码人妻丝袜在线视频红杏| 峨眉山市| 最近中文字幕完整版hd| 久久精品无码一区二区小草|