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

时间:2012-08-14 12:54:57

标签: javascript backbone.js underscore.js

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

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

注意:

是否也可以消除0上的nullModelResult值?

谢谢。

1 个答案:

答案 0 :(得分:1)

要取消0null值,您可以使用the validate function。它始终在调用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

希望这有帮助!

相关问题