Setting attributes on a collection - backbone js

idbentley picture idbentley · May 9, 2011 · Viewed 28.2k times · Source

Collections in backbone js don't allow you to set attributes, but I often find that there is need to store some meta-information about a collection. Where is the best place to set that information?

Answer

Raynos picture Raynos · May 9, 2011

Just .extend the collection with a meta data storage function.

var MyCollection = Backbone.Collection.extend({
    initialize: function() {
        ...

        this._meta = {};
    },
    model: ...
    meta: function(prop, value) {
        if (value === undefined) {
            return this._meta[prop]
        } else {
            this._meta[prop] = value;
        }
    },
});

var collection = new MyCollection();
collection.add(someModels);
collection.meta("someProperty", value);

...

var value = collection.meta("someProperty");

There may be better places for storing specific meta data but this depends completely on what the meta data is.

For storing generic meta data extending your collection constructor with a method to do deal with that should work.

Be wary that if this meta data needs to be stored and loaded from the server then you've got a bigger task at hand.