【问题标题】:Unset all properties of a Backbone.js model that start with the same substring取消设置以相同子字符串开头的 Backbone.js 模型的所有属性
【发布时间】:2013-02-25 20:11:45
【问题描述】:

我想取消设置以相同子字符串开头的 Backbone.js 模型的所有属性,例如:

logo_id
logo_width
logo_height

我想做这样的事情:

model.unsetAllStartsWith('logo');

代码类似于:

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

我对模型和 toJSON 感到困惑。另外,这是扩展 Backbone 模型类的正确方法吗?

【问题讨论】:

    标签: javascript backbone.js model underscore.js


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个。

      unsetAllStartsWith:函数(str){ var $this = 这个 var 属性 = Object.keys($this.toJSON()); _.each(属性,函数(属性){ var regex = new RegExp('^'+ str, 'gi') 如果(属性。匹配(正则表达式)) $this.unset(属性) } } }

      【讨论】:

        【解决方案3】:

        这是添加方法(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');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-16
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          • 2018-04-19
          • 1970-01-01
          相关资源
          最近更新 更多