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

ノート:

を排除し0たり、null値を付けたりすることは可能ModelResultですか?

ありがとうございました。

4

1 に答える 1

1

0と のnull値を消去するには、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が除外されます。0null

お役に立てれば!

于 2012-08-14T13:26:58.147 に答える