中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Backbone.js框架中Model與Collection的使用實例
來源:易賢網 閱讀:1147 次 日期:2016-07-02 13:08:49
溫馨提示:易賢網小編為您整理了“Backbone.js框架中Model與Collection的使用實例”,方便廣大網友查閱!

這篇文章主要介紹了Backbone.js框架中Model與Collection的使用實例,Collection是Model的一個有序的集合,需要的朋友可以參考下

Model

關于backbone,最基礎的一個東西就是model,這個東西就像是后端開發中的數據庫映射那個model一樣,也是數據對象的模型,并且應該是和后端的model有相同的屬性(僅是需要通過前端來操作的屬性)。

下面就從實例來一步一步的帶大家來了解backbone的model到底是什么樣的一個東西。

首先定義一個html的頁面:

<!DOCTYPE html>

<html>

<head>

<title>the5fire-backbone-model</title>

</head>

<body>

</body>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>

<script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>

<script>

(function ($) {

/**

 *此處填充代碼

 **/

})(jQuery);

</script>

</html>

下面的代碼需要填到這個html的script標簽中的function中。

1、最簡單的一個對象

Man = Backbone.Model.extend({

    initialize: function(){

      alert('Hey, you create me!');

    }

  });

var man = new Man;

這個就很簡單了,在helloworld里面也有了一個model的展現,不定義了屬性,這里是一個 初始化時的方法,或者稱之為構造函數。

2、對象賦值的兩種方法

第一種,直接定義,設置默認值。

Man = Backbone.Model.extend({

  initialize: function(){

    alert('Hey, you create me!');

  },

  defaults: {

    name:'張三',

    age: '38'

  }

});

var man = new Man;

alert(man.get('name'));

第二種,賦值時定義

Man = Backbone.Model.extend({

  initialize: function(){

    alert('Hey, you create me!');

  }

});

man.set({name:'the5fire',age:'10'});

alert(man.get('name'));

取值的時候都是用get。

3、對象中的方法

Man = Backbone.Model.extend({

  initialize: function(){

    alert('Hey, you create me!');

  },

  defaults: {

    name:'張三',

    age: '38'

  },

  aboutMe: function(){

    return '我叫' + this.get('name') + ',今年' + this.get('age') + '歲';

  }

});

var man = new Man;

alert(man.aboutMe());

4、監聽對象中屬性的變化

Man = Backbone.Model.extend({

  initialize: function(){

    alert('Hey, you create me!');

    //初始化時綁定監聽

    this.bind("change:name",function(){

      var name = this.get("name");

      alert("你改變了name屬性為:" + name);

    });

  },

  defaults: {

    name:'張三',

    age: '38'

  },

  aboutMe: function(){

    return '我叫' + this.get('name') + ',今年' + this.get('age') + '歲';

  }

});

var man = new Man;

man.set({name:'the5fire'}) //觸發綁定的change事件,alert。

5、為對象添加驗證規則,以及錯誤提示

Man = Backbone.Model.extend({

  initialize: function(){

    alert('Hey, you create me!');

    //初始化時綁定監聽

    this.bind("change:name",function(){

      var name = this.get("name");

      alert("你改變了name屬性為:" + name);

    });

    this.bind("error",function(model,error){

      alert(error);

    });

  },

  defaults: {

    name:'張三',

    age: '38'

  },

  validate:function(attributes){

    if(attributes.name == '') {

      return "name不能為空!";

    }

  },

  aboutMe: function(){

    return '我叫' + this.get('name') + ',今年' + this.get('age') + '歲';

  }

});

var man = new Man;

man.set({name:''}); //根據驗證規則,彈出錯誤提示。

6、對象的獲取和保存,需要服務器端支持才能測試。

首先需要為對象定義一個url屬性,調用save方法時會post對象的所有屬性到server端。

Man = Backbone.Model.extend({

  url:'/save/',

  initialize: function(){

    alert('Hey, you create me!');

    //初始化時綁定監聽

    this.bind("change:name",function(){

      var name = this.get("name");

      alert("你改變了name屬性為:" + name);

    });

    this.bind("error",function(model,error){

      alert(error);

    });

  },

  defaults: {

    name:'張三',

    age: '38'

  },

  validate:function(attributes){

    if(attributes.name == '') {

      return "name不能為空!";

    }

  },

  aboutMe: function(){

    return '我叫' + this.get('name') + ',今年' + this.get('age') + '歲';

  }

});

var man = new Man;;

man.set({name:'the5fire'});

man.save(); //會發送POST到模型對應的url,數據格式為json{"name":"the5fire","age":38}

//然后接著就是從服務器端獲取數據使用方法fetch([options])

var man1 = new Man;

//第一種情況,如果直接使用fetch方法,那么他會發送get請求到你model的url中,

  //你在服務器端可以通過判斷是get還是post來進行對應的操作。

man1.fetch();

//第二種情況,在fetch中加入參數,如下:

man1.fetch({url:'/getmans/'});

  //這樣,就會發送get請求到/getmans/這個url中,

  //服務器返回的結果樣式應該是對應的json格式數據,同save時POST過去的格式。

//不過接受服務器端返回的數據方法是這樣的:

man1.fetch({url:'/getmans/',success:function(model,response){

    alert('success');

    //model為獲取到的數據

    alert(model.get('name'));

  },error:function(){

    //當返回格式不正確或者是非json數據時,會執行此方法

    alert('error');

  }});

注:上述代碼僅僅均為可正常執行的代碼,不過關于服務器端的實例在后面會有。

這里還要補充一點,就是關于服務器的異步操作都是通過Backbone.sync這個方法來完成的,調用這個方法的時候會自動的傳遞一個參數過去,根據參數向服務器端發送對應的請求。比如你save,backbone會判斷你的這個對象是不是新的,如果是新創建的則參數為create,如果是已存在的對象只是進行了改變,那么參數就為update,如果你調用fetch方法,那參數就是read,如果是destory,那么參數就是delete。也就是所謂的CRUD ("create", "read", "update", or "delete"),而這四種參數對應的請求類型為POST,GET,PUT,DELETE。你可以在服務器根據這個request類型,來做出相應的CRUD操作。

Note:

關于url和urlRoot的事,如果你設置了url,那么你的CRUD都會發送對應請求到這個url上,但是這樣又一個問題,就是delete請求,發送了請求,但是卻沒有發送任何數據,那么你在服務器端就不知道應該刪除哪個對象(記錄),所以這里又一個urlRoot的概念,你設置了urlRoot之后,你發送PUT和DELETE請求的時候,其請求的url地址就是:/baseurl/[model.id],這樣你就可以在服務器端通過對url后面值的提取更新或者刪除對應的對象(記錄)。

Collection

collection是model對象的一個有序的集合,概念理解起來十分簡單,在通過幾個例子來看一下,會覺得更簡單。

1、關于book和bookshelf的例子

Book = Backbone.Model.extend({

defaults : {  // 感謝網友藍色動力指正改為defaults

title:'default'

},

initialize: function(){

//alert('Hey, you create me!');

}

});

BookShelf = Backbone.Collection.extend({

model : Book

});

var book1 = new Book({title : 'book1'});

var book2 = new Book({title : 'book2'});

var book3 = new Book({title : 'book3'});

//var bookShelf = new BookShelf([book1, book2, book3]); //注意這里面是數組,或者使用add

var bookShelf = new BookShelf;

bookShelf.add(book1);

bookShelf.add(book2);

bookShelf.add(book3);

bookShelf.remove(book3);

//基于underscore這個js庫,還可以使用each的方法獲取collection中的數據

bookShelf.each(function(book){

alert(book.get('title'));

});

很簡單,不解釋

2、使用fetch從服務器端獲取數據

首先要在上面的的Bookshelf中定義url,注意collection中并沒有urlRoot這個屬性。或者你直接在fetch方法中定義url的值,如下:

bookShelf.fetch({url:'/getbooks/',success:function(collection,response){

collection.each(function(book){

alert(book.get('title'));

});

},error:function(){

alert('error');

}});

其中也定義了兩個接受返回值的方法,具體含義我想很容易理解,返回正確格式的數據,就會調用success方法,錯誤格式的數據就會調用error方法,當然error方法也看添加和success方法一樣的形參。

對應的BookShelf的返回格式如下:[{'title':'book1'},{'title':'book2'}.....]

3、reset方法

這個方法的時候是要和上面的fetch進行配合的,collection在fetch到數據之后,會調用reset方法,所以你需要在collection中定義reset方法或者是綁定reset方法。這里使用綁定演示:

bookShelf.bind('reset',showAllBooks);

showAllBooks = function(){

bookShelf.each(function(book){

  //將book數據渲染到頁面。

});

}

綁定的步驟要在fetch之前進行。

下面給出關于collection的完整代碼,需要服務器端支持才行,服務器端的搭建在后面會寫到。

<!DOCTYPE html>

<html>

<head>

  <title>the5fire-backbone-collection</title>

</head>

<body>

</body>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>

<script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>

<script>

(function ($) {

  //collection是一個簡單的models的有序集合

  //1、一個簡單的例子

  Book = Backbone.Model.extend({

    defaults : {  // 感謝網友藍色動力指正改為defaults

      title:'default'

    },

    initialize: function(){

      //alert('Hey, you create me!');

    }

  });

  BookShelf = Backbone.Collection.extend({

    model : Book

  });

  var book1 = new Book({title : 'book1'});

  var book2 = new Book({title : 'book2'});

  var book3 = new Book({title : 'book3'});

  //var bookShelf = new BookShelf([book1, book2, book3]); //注意這里面是數組,或者使用add

  var bookShelf = new BookShelf;

  bookShelf.add(book1);

  bookShelf.add(book2);

  bookShelf.add(book3);

  bookShelf.remove(book3);

  /*

  for(var i=0; i<bookShelf.models.length; i++) {

    alert(bookShelf.models[i].get('title'));

  }

  */

  //基于underscore這個js庫,還可以使用each的方法獲取collection中的數據

  bookShelf.each(function(book){

    alert(book.get('title'));

  });

  //2、使用fetch從服務器端獲取數據,使用reset渲染

  bookShelf.bind('reset', showAllBooks);

  bookShelf.fetch({url:'/getbooks/',success:function(collection,response){

    collection.each(function(book){

      alert(book.get('title'));

    });

  },error:function(){

    alert('error');

  }});

  showAllBooks = function(){

    bookShelf.each(function(book){

      //將book數據渲染到頁面。

    });

  }

  //上述代碼僅僅均為可正常執行的代碼,不過關于服務器端的實例在后面會有。

})(jQuery);

</script>

</html>

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲高清久久网| 一本色道久久综合亚洲二区三区 | 国产自产精品| 欧美日韩不卡视频| 久久久综合视频| 久久久999精品免费| 久久久久久高潮国产精品视| 老司机午夜精品视频在线观看| 精品福利av| 国产精品久久久一区麻豆最新章节| 欧美成人在线免费视频| 美女国产一区| 欧美国产亚洲视频| 欧美人牲a欧美精品| 欧美日韩免费网站| 国产精品美女午夜av| 国产伦理一区| 好吊成人免视频| 亚洲国产欧美另类丝袜| 亚洲乱码国产乱码精品精可以看 | 亚洲男人的天堂在线aⅴ视频| 亚洲毛片在线| 亚洲影院免费| 欧美永久精品| 麻豆av一区二区三区| 欧美精品一区二区三区在线播放| 欧美日韩美女| 国产精品影院在线观看| 黄色精品一区| 亚洲久久视频| 先锋资源久久| 欧美大片在线观看一区| 欧美日韩久久久久久| 欧美亚洲成人免费| 欧美亚州韩日在线看免费版国语版| 国产精品久久久久久久久久ktv| 国产欧美va欧美va香蕉在| 国产亚洲精品美女| 亚洲精品偷拍| 久久高清国产| 欧美激情女人20p| 国产精品网红福利| 91久久久一线二线三线品牌| 亚洲一区二区三区高清不卡| 黄色av一区| 久久疯狂做爰流白浆xx| 在线国产精品播放| 欧美日韩一区二区视频在线 | 欧美视频在线一区| 国产欧美欧美| 久久国产天堂福利天堂| 国产一区91精品张津瑜| 亚洲欧美激情诱惑| 欧美黄免费看| 国产精品一区二区三区四区五区| 狠狠色狠狠色综合日日91app| 亚洲人成在线观看一区二区 | 久久高清国产| 欧美—级在线免费片| 久久久久久久97| 欧美日韩成人一区二区三区| 国产午夜精品美女毛片视频| 日韩亚洲不卡在线| 久久久99国产精品免费| 欧美色道久久88综合亚洲精品| 韩日欧美一区二区| 亚洲欧美bt| 欧美三区不卡| 亚洲国产精品成人精品| 欧美在线3区| 欧美午夜影院| 亚洲人成绝费网站色www| 久久久久久久综合色一本| 国产欧美高清| 亚洲一区二区影院| 欧美天堂在线观看| 99re66热这里只有精品4| 久久亚洲国产精品一区二区| 国内精品亚洲| 久久精品一本久久99精品| 国产尤物精品| 久久精品系列| 欧美三级不卡| 在线视频日韩| 欧美午夜电影在线| 欧美第十八页| 免费高清在线视频一区·| 久久亚洲国产精品日日av夜夜| 一区二区高清在线观看| 136国产福利精品导航| 国产亚洲欧美激情| 国产精品久久久久久久9999| 欧美精品久久一区| 免费在线国产精品| 久久精品一区二区| 国产日韩欧美日韩大片| 久久久蜜桃精品 | 欧美日韩精品一本二本三本| 亚洲国内自拍| 欧美日韩综合精品| 亚洲国产精品传媒在线观看| 午夜精品在线看| 欧美性猛交99久久久久99按摩| 欧美涩涩网站| 国产精品入口麻豆原神| 夜夜精品视频| 嫩草成人www欧美| 亚洲综合色激情五月| 欧美精品成人| 一区二区三区日韩| 国产精品久久久久9999| 久久爱另类一区二区小说| 欧美成人精品| 久久久噜噜噜久噜久久| 欧美一级艳片视频免费观看| 欧美日韩免费观看一区=区三区| 亚洲香蕉伊综合在人在线视看| 国产一区香蕉久久| 亚洲性视频网站| 亚洲一区3d动漫同人无遮挡| 久久久欧美精品| 国产一区二区在线观看免费| 午夜精品国产| 亚洲网站在线观看| 欧美日韩精品免费看| 亚洲午夜成aⅴ人片| 国产视频亚洲精品| 国产精品99久久99久久久二8 | 欧美一区2区三区4区公司二百| 欧美日韩一区视频| 欧美亚洲视频在线观看| 韩国亚洲精品| 欧美人与禽性xxxxx杂性| 亚洲欧美久久久久一区二区三区| 亚洲丶国产丶欧美一区二区三区| 欧美交受高潮1| 欧美一区午夜精品| …久久精品99久久香蕉国产| 欧美日韩在线免费| 老司机精品视频网站| 亚洲午夜久久久久久久久电影院| 国产精品亚洲激情 | 欧美刺激性大交免费视频| 亚洲精品一区在线观看香蕉| 国产精品久久久久久久一区探花| 在线成人激情视频| 国产精品av免费在线观看| 久久精品视频va| 一区二区三区精品国产| 国内成人自拍视频| 国产精品女人久久久久久| 久久亚洲国产精品日日av夜夜| 亚洲一区二区三区在线| 91久久久久久| 黄色成人小视频| 国产精品剧情在线亚洲| 久久综合色一综合色88| 性色av一区二区三区| 这里是久久伊人| 亚洲精品美女免费| **网站欧美大片在线观看| 国产精品亚洲综合| 欧美视频二区36p| 欧美激情视频一区二区三区在线播放 | 午夜影院日韩| 999亚洲国产精| 亚洲成人在线观看视频| 国产一区二区三区高清在线观看| 欧美三级韩国三级日本三斤| 久久免费视频在线观看| 亚洲欧美日韩在线综合| 一本色道**综合亚洲精品蜜桃冫| 136国产福利精品导航网址| 国产偷国产偷亚洲高清97cao| 国产精品久久久久久久久免费樱桃| 欧美日韩1080p| 欧美**人妖| 久久亚洲一区| 久久精品日韩| 久久婷婷国产综合精品青草| 欧美一区中文字幕| 久久不见久久见免费视频1| 欧美一区激情| 久久精品72免费观看| 久久精品国产77777蜜臀| 久久久国产视频91| 美女爽到呻吟久久久久| 欧美福利一区| 欧美日韩亚洲不卡| 久久青青草原一区二区| 久久一区二区三区四区| 免费一区视频| 欧美精品一区二区视频| 欧美日韩在线电影| 国产精品久久久一区二区三区| 国产精品久久一级| 国内精品免费午夜毛片| 亚洲激情在线| 一区二区精品在线| 先锋影院在线亚洲|