1

我想比较我收藏的模型属性并将其存储到新模型中。

Collection:
   Model1:
     Apple: 1
     Banana: 0
     Orange: 0
     Status: 1254869
   Model2:
     Apple: 0
     Banana: 1
     Orange: 1
     Status: null

输出应该是:

ModelResult:
     Apple: 1
     Banana: 1
     Orange: 1
     Status: 1254869

有任何想法吗?

我手动做

ModelResult = collection.at(0); 
collection.each( function(model){
    if(model.get("Apple") != 0){
      ModelResult.set({Apple: model.get("Apple")});
    }
    if(model.get("Banana") != 0){
      ModelResult.set({Apple: model.get("Banana")});
    }
    if(model.get("Orange") != 0){
      ModelResult.set({Apple: model.get("Orange")});
    }
    if(model.get("Status") != ""){
      ModelResult.set({Apple: model.get("Status")});
    }
});

笔记:

是否也可以消除0null重视ModelResult

谢谢你。

4

1 回答 1

1

对于消除0null值,您可以使用validate函数。它总是在set或被调用之前save调用,如果值与您想要的不匹配,您只需返回错误消息并且更改不会生效。

这也意味着您ModelResult必须是一个单独的模型。

var ModelResult = Backbone.Model.extend({
  ...
  validate: function(attrs) {
    if (_.intersection([0, null], _.values(attrs))) {
      return "Zeroes and nulls are ignored.";
    }
  },
  ...
});

现在你的每个功能可能就像

function(model) {
  _.each(model.toJSON(), function(value, key) {
    ModelResult.set(key, value);
  }); 
}

现在它将遍历每个模型的每个属性并将它们添加到ModelResult,但过滤掉所有0s 和nulls。

希望这可以帮助!

于 2012-08-14T13:26:58.147 回答