Backbone.js的集合詳解(上)

來源:互聯網
上載者:User

《Backbone.js的集合詳解(上)》

Backbone.js的集合只是一個簡單的有序集的模型。通過適應模型和集合,我們可以避免資料處理邏輯放到了我們的視圖層。此外,模型和集合還提供了便利的與後端一起工作的方法,當資料發生變化時,可以自動化地標記Backbone.js視圖。這樣,它可以用於如下的情況:

Model: Animal, Collection: Zoo

通常情況下你的集合只適應一種模型,但模型本身並不局限於集合的類型。
Model: person, Collection: OfficeModel: person, Collection: Home

下面是常見的模型/集合的例子:
var Music = Backbone.Model.extend({      initialize: function(){          console.log("Welcome to the music world");      }});var Album = Backbone.Collection.extend({    model: Music});

上面的代碼告訴我們如何建立集合。但是它沒有告訴我們用資料操縱集合的過程。因此,讓我們探索這個過程:
var Music = Backbone.Model.extend({        defaults: {            name: "Not specified",            artist: "Not specified"        },        initialize: function(){            console.log("Welcome to the music world ");    }    });    var Album = Backbone.Collection.extend({        model: Music    });    var music1 = new Music ({ id: 1 ,name: "How Bizarre", artist: "OMC" });    var music 2 = new Music ({id: 2,  name: "What Hurts the Most", artist: “Rascal Flatts" });    var myAlbum = new Album([music 1, music 2]);    console.log( myAlbum.models ); 

下面我們來看看Backbone.js的集合和其它組件的關係:


一、添加模型到集合

正如我們所知的那樣,集合是模型的集合。因此,我們可以在集合上添加模型。要添加模型到集合,我們可以使用add方法。我們還可以添加模型到集合的開始——通過使用unshift方法。

var music3 = new Music({ id: 3, name: "Yes I Do",artist:“Rascal Flatts"  });Music.add(music3);console.log('New Song Added');console.log(JSON.stringify(Music));

二、從集合中移除模型

很多時候,我們會有從集合中移除一些指定的資料這樣的需求。要從集合中移除模型,我們需要提供模型的id。如果我們想用一個完整的新資料集替換原集合,我們可以使用reset方法。

Music.remove(1);console.log('How Bizarre removed...');console.log(JSON.stringify(Music));

三、Get和Set

如果我們需要從代碼其它地方的集合中擷取一個值,那麼可以直接使用get方法。此時,我們向帶檢索的模型傳遞ID值。

console.log(JSON.stringify(Music.get(2)));

集合的set方法有一個有趣的實現。set方法通過傳遞模型列表,執行集合的“智能”更新。如果列表中的模型還不在集合中,那麼會添加到集合。如果模型已經在集合中,那麼它的屬性會被合并。如果集合包含了不屬於列表的任意模型,那麼這項模型會被移除。
var Music = Backbone.Model.extend({         // This attribute should be set as a default        defaults: {            Name: ''        },        // Set the id attribute so that the collection                 idAttribute: 'id'    });    var song = Backbone.Collection.extend({        model: Music    });    var models = [{        Name: 'OMC',        id: 1    }, {        Name: 'Flatts',        id: 2    }];    var collection = new song(models);    collection.bind('add', function (model) {        alert('addb')    });    collection.bind('remove', function () {        alert('add')    });    models = [{        Name: 'OMC',        id :1    }, {        Name: 'Flatts',        id: 2    }, {        Name: ' Jackson ',        id: 3    }];    collection.add(models);});

正如我們在上面所看到的那樣,事前我們已經有2個模型了,當我們添加第3個模型時,早先的模型保持不變。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.