99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

必學(xué)的KNOCKOUT.JS 框架使用方法

發(fā)布時間:2016-07-28 20:07  回復(fù):0  查看:2726   最后回復(fù):2016-07-28 20:07  

最近一直在使用和學(xué)習(xí)KNOCKOUT.JS。有了一些心得體會就把它們總結(jié)了出來。Knockout js 使用心得條目如下:

 

1 knockout js是個輕量級的js框架,在knockout官網(wǎng)下載之后,可以引入自己的html中。knockout js的使用并不需要jQuery配合,但我們也可以在jQuery之后自己的js文件之前引入knockoutjs

 

2 knockout js是一個MVVM(Model View Viewmodel)框架其他還有MVC(Controller),MVP(Presenter)框架

 

3 knockout js 是創(chuàng)建一些監(jiān)控變量和監(jiān)控數(shù)組和事件,并將這些變量,數(shù)組,事件通過data-bind屬性統(tǒng)統(tǒng)綁定在html上。

好處:1省去了在js文檔中要寫綁定和獲取元素的煩惱,因?yàn)槟硞€html元素要獲取的內(nèi)容和事件已經(jīng)綁定好了 如果元素的內(nèi)容或者屬性有變化,不需要再查找元素,更改屬性,直接修改綁定的變量,數(shù)組和事件,html元素就會動態(tài)地更新

 

4 knockout的引入:

 

<script type="text/javascript" src="./js/jquery-2.2.3.js"></script>

<script src="./js/knockout-3.4.0.js"></script>

<script type="text/javascript" src="./js/demou1.js"></script>

 

5 knockout的結(jié)構(gòu):

 

在js文件中,需要引入的初始數(shù)據(jù)(一般來說都是不變的數(shù)據(jù))都可以在model外定義,可變的數(shù)據(jù)都要定義在model內(nèi)部

 

var variable1 = "...";var variable2 = "...";var variableArray = ["..."];var variableObject = {};/*...一系列初始量的定義這些值是作為外部數(shù)據(jù),要傳入這個model...*/function ViewModel(){

   var self = this;//this賦值給self,這樣方便內(nèi)部不同域時使用this

   /*

   * 自己定義的監(jiān)控變量,監(jiān)控數(shù)組,還有事件寫在這里

   */

}

ko.applyBindings(new ViewModel());

 

最后需要應(yīng)用這個ViewModel,注意每個項(xiàng)目只可以應(yīng)用一次這個Model

嚴(yán)重注意一點(diǎn):如果在body的末尾引入script,那么就可以直接向上邊這樣寫代碼了;如果在頭部引入(推薦),那么就需要將所有代碼包裹起來(DOM樹結(jié)構(gòu)完整了再運(yùn)行代碼),兩種方法,可以用jQuery包裹,也可以用純jswindow.addEventListener(“l(fā)oad”, function(){}, false)來包裹,個人覺得第二個更好,少用jQuery可以節(jié)省運(yùn)行時間

 

window.addEventListener("load", function(){

   /*...所有代碼...*/

}, false);

 

$(function(){

   /*...所有代碼...*/

});

 

 

6監(jiān)控變量:

 

監(jiān)控變量的定義

 

self.variable1 = ko.observable("...");

self.variable2 = ko.observable(100);

self.variable3 = ko.observable(variable1);

self.variable4 = ko.observable({

   name: "alex",

   age: 18

});

 

這個括號里面就是這個監(jiān)控變量的值,這個值可以是字符串,可以是數(shù)字。這樣的話,模型就會實(shí)時監(jiān)控這個變量,任何html元素使用了這個變量,當(dāng)我們在模型中改變這個變量的時候,html中的值就會改變。

 

監(jiān)控變量的值獲取

var value = self.variable1();

注意,值后邊一定要有括號,因?yàn)楸O(jiān)控的本質(zhì)是個函數(shù),執(zhí)行這個函數(shù)會返回所監(jiān)控的內(nèi)容

這個括號里還可以寫外部定義的字符串或數(shù)字

 

監(jiān)控變量的值更新

self.variable1("abc");

self.variable2(self.variable2() + 1);

self.variable1().school = "123"

在括號內(nèi)賦值,或者改變數(shù)值,來更新監(jiān)控變量。注意第二個,更新的時候是在原有的上邊加1

 

監(jiān)控數(shù)組

 

監(jiān)控數(shù)組的定義:使用ko.observableArray()來定義

self.arr = ko.observableArray([]);

self.arr1 = ko.observableArray([{}, {}, {}]);

self.arr2 = ko.observableArray(variableArray);

監(jiān)控數(shù)組里面可以放空數(shù)組,可以放對象組成的數(shù)組,可以把模型外的數(shù)組引入

注意,如果想使用對象,也推薦將對象作為數(shù)組的元素來使用,方便用foreach:綁定,如果只是想用對象的話,也可以用ko.observable()來監(jiān)控

 

監(jiān)控數(shù)組的獲取

var array = self.arr();

必須要有括號。獲取到的是數(shù)組,也就是之前括號里面的監(jiān)控的值


監(jiān)控數(shù)組的更新

self.arr([{

   "name": "Lee"

}, {

   "name": "alex"

}])

當(dāng)然監(jiān)控數(shù)組也可以用js的數(shù)組方法來更新,

比如self.arr.push(123) 和 self.arr().push(123)效果一樣的,不過推薦后者,與監(jiān)控變量一樣的方法,更清晰。

監(jiān)控數(shù)組可以用的方法比如.push()  .pop()  .unshift()  .shift()   .slice()  .reverse()   .sort()  .splice()

注意.sort()方法,我們知道排序時必須要傳一個比大小的函數(shù),不然會按照字符串來比較

 

self.arr().sort(function(a, b){

   if(a < b){

       return -1;

   }else{

       return 1;

   }

});

 

從小到大還是從大到小就是調(diào)整-11的位置

因?yàn)閿?shù)組的上述方法都是可以直接改變數(shù)組的,所以我們可以用self.arr().方法()直接使用,但是無論字符串還是數(shù)字都沒有可以改變自身的方法,所以就不能這樣更新了。

 

其實(shí)監(jiān)控變量還是監(jiān)控數(shù)組本質(zhì)都可以用self.content(self.content()變化)來更新獲取都是用self.content()來獲取

 

 

 

原文來自:博客園/Wiesler

您還未登錄,請先登錄

熱門帖子

最新帖子

?