比较主干中的两个模型属性

compare two model attributes in backbone

本文关键字:两个 模型 属性 比较      更新时间:2023-09-26

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

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上的值?

谢谢。

要消除0null值,您可以使用validate函数。它总是在调用setsave之前调用,如果 valus 与您想要的不匹配,您只需返回错误消息,更改将不会生效。

这也意味着您的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中,但过滤掉所有0null

希望这有帮助!