Pratik
Pratik

Reputation: 1541

Get properties of a Backbone model starting with certain text using Underscore.js

I have a Backbone Model in which there are certain properties like

test_id
test_name
test_desc
test_score

Now I want to retrieve properties which are starting with "test_".

I tried with code below and its working fine.

var MyModel = Backbone.Model.extend({
    getTestProperties: function(str){
       // get clone of attributes to iterate over
       var testProperties = {};
       var attrs = _.clone(this.attributes);
       _.each(attrs, function(val, key){
              if(key.indexOf(str) == 0){
                  testProperties[key]= val;
              }
           }, this);
    }
});

But Is there any other way I can get these properties using underscore methods ?

Thanks

Upvotes: 1

Views: 66

Answers (2)

nikoshr
nikoshr

Reputation: 33354

Backbone proxies some methods from Underscore on models that can help you create a more readable _.filter: _.keys and _.pick

You can then simplify your function like this :

var MyModel = Backbone.Model.extend({
    getTestProperties: function (str) {
        // get the keys you want
        var keys = _.filter(this.keys(), function (key) {
            return key.indexOf(str) === 0;
        });

        // and build an object
        return this.pick(keys);
    }
});

And a demo http://jsfiddle.net/nikoshr/5a63c/

Upvotes: 2

David Sulc
David Sulc

Reputation: 25994

Try something like

var attrs = _.filter(_.keys(_.clone(this.attributes)), function(attr){
  return attr.indexOf("text_") === 0;
});

Upvotes: 1

Related Questions