Backbone入門(Model,Collection)
阿新 • • 發佈:2019-01-03
Backbone 是一個前端 JS 程式碼 MVC 框架,被著名的 37signals 用來構建他們的移動客戶端。它不可取代 Jquery,不可取代現有的 template 庫。而是和這些結合起來構建複雜的 web 前端互動應用。
如果專案涉及大量的 javascript 程式碼,實現很多複雜的前端互動功能,首先你會想到把資料和展示分離。使用 Jquery 的 selector 和 callback 可以輕鬆做到這點。但是對於富客戶端的WEB應用大量程式碼的結構化組織非常必要。
Backbone 就提供了 javascript 程式碼的組織的功能。Backbone 主要包括 models, collections, views 和 events, controller 。
Model(模型)
Models 用來建立資料,校驗資料,儲存資料到伺服器端。Models 還可以繫結事件。比如使用者動作變化觸發 models 的 change 事件,所有展示此model 資料的 views 都會接收到 這個 change 事件,進行重繪。最簡單的定義如下:
- var Game = Backbone.Model.extend({});
稍微發雜一點
- var Game = Backbone.Model.extend({
- initialize: function(){
- alert("Oh hey! ");
- },
- defaults: {
- name: 'Default title',
- releaseDate: 2011,
- }
- });
initialize
相當於構造方法,初始化時呼叫
簡單實用:
- // Create a new game
- var portal = new Game({ name: "Portal 2", releaseDate: 2011});
- // release will hold the releaseDate value -- 2011 here
- var release = portal.get('releaseDate');
- // Changes the name attribute
- portal.set({ name: "Portal 2 by Valve"});
此時資料還都在記憶體中,需要執行save方法才會提交到伺服器。(還未理解)
- portal.save();
Collection(集合)
實際上,相當於Model的集合。定義方法如下:- var GamesCollection = Backbone.Collection.extend({
- model : Game,
- }
- });
需要注意的是,定義Collection的時候,一定要指定Model。 下面讓我們為這個集合新增一個方法,如下:
- var GamesCollection = Backbone.Collection.extend({
- model : Game,
- old : function() {
- returnthis.filter(function(game) {
- return game.get('releaseDate') < 2009;
- });
- }
- }
- });
集合的使用方法如下:
- var games = new GamesCollection
- games.get(0);
當然,也可以動態構成集合,如下:
- var GamesCollection = Backbone.Collection.extend({
- model : Game,
- url: '/games'
- }
- });
- var games = new GamesCollection
- games.fetch();
這邊的url告訴collection到哪去獲取資料,fetch方法會發出一個非同步請求到伺服器,從而獲取資料構成集合。(fetch實際上就是呼叫jquery的ajax方法)