使用Underscore.js从某些文本开始获取Backbone模型的属性

时间:2014-03-17 10:08:03

标签: backbone.js underscore.js

我有一个Backbone模型,其中有某些属性,如

test_id
test_name
test_desc
test_score

现在我想要检索以" test _" 开头的属性。

我尝试使用下面的代码并且工作正常。

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);
    }
});

但是 有没有其他方法可以使用下划线方法获得这些属性?

由于

2 个答案:

答案 0 :(得分:2)

Backbone代理some methods from Underscore on models可以帮助您创建更具可读性的_.filter_.keys_.pick

然后您可以像这样简化您的功能:

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);
    }
});

演示http://jsfiddle.net/nikoshr/5a63c/

答案 1 :(得分:1)

尝试类似

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