2

次のように、同じ部分文字列で始まる Backbone.js モデルのすべてのプロパティを設定解除したいと思います。

logo_id
logo_width
logo_height

私は次のようなことをしたいと思います:

model.unsetAllStartsWith('logo');

コードは次のようになります。

_.extend(Backbone.Model, {
    unsetAllStartsWith : function(str){
        // something with this.toJSON() ?
    }
});

モデルと toJSON で混乱します。また、バックボーン モデル クラスを拡張する正しい方法ですか?

4

3 に答える 3

4

Backbone.Model には extend メソッドが組み込まれているため、次のように実行できます。

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

var model = new MyModel({logo_width: 100, logo_height: 200});
model.unsetAllStartsWith('logo');
于 2013-02-25T20:36:28.820 に答える
2

これを試してみてください。

unsetAllStartsWith : 関数(文字列){
        var $this = this
        var プロパティ = Object.keys($this.toJSON());
        _.each(プロパティ、関数(プロパティ) {
            var regex = new RegExp('^'+ str, 'gi')
            if(property.match(正規表現))
               $this.unset(プロパティ)        
        }

      }

}
于 2013-02-25T20:37:26.683 に答える
1

メソッド( jsfiddle)を追加する際の少し異なる考え方は次のとおりです。

Backbone.Model.prototype.unsetAllStartsWith = function(prefix) {
    var that = this;
    _.each(this.attributes, function(attrVal, attrName) {
      if (attrName.slice(0,prefix.length) === prefix) {
          that.unset(attrName);
      }
  })
};

そのように使用します:

var MyModel = Backbone.Model.extend({
    defaults: {
        'foo_first': 'bar',
        'foo_second': 'bar2',
        'different': 'bar3'
    }
});

var testModel = new MyModel();
testModel.unsetAllStartsWith('foo');
于 2013-02-26T00:11:36.703 に答える