1

仲間、私はゲストのコレクションを持っています。各ゲストには、占有しているベッドの inDate、outDate、および id_beds があります。次のステートメントを同時に満たすすべてのゲストをフィルタリングしようとしています。

  • id_beds == ベッド
  • outDate <== 日付
  • inDate >== 日付

    App.Collections.Guests = Backbone.Collection.extend({
    url: 'guests/',
    model: App.Models.Guest,
    getBooking: function(bed, date){
    var gf = _.filter(this.models, function(model){
        // Get all Guests with id_beds = bed
            // && outDate < date && inDate <= date
    });
    
    console.log(gf);
    return gf;
    }
    });
    

さて、問題は、これらの 3 つのステートメントでコレクションを除外する方法がわからないということです。まず、日付は文字列であり、どちらが大きいかがわからないため、日付を比較する方法がわかりません。次に、複数のパラメーターでフィルター処理するロジックがどのようになるかわかりません。

何か案は?

ありがとう!

4

2 に答える 2

5

あなたはほとんどそこにいます。日付はYYYY-MM-DD単純な文字列比較が機能するため、フィルター関数はtrue3 つの条件が満たされたときに返されるだけです。

getBooking: function(bed, date) {
  var gf = this.models.filter(function(model) {
    return (
      model.get('outDate') > date &&
      model.get('inDate') <= date &&
      model.get('id_beds') === bed
    )
  })
  // ...
  return gf
}
于 2013-02-19T01:46:13.827 に答える
1

こんにちは、バックボーンを使用してコレクションをフィルタリングするための簡単なソリューションです

コレクションの最初に、次のようなフィルター処理された関数が必要です

 App.Collections.Guests = Backbone.Collection.extend ({
  filtered : function ( ) { 

有効な場合は true を返し、無効な場合は false を返す UnderScore フィルターを使用することをお勧めします。true は探しているものです。this.models を使用して現在のコレクション モデルを取得します model.get( '' ) を使用してチェックする要素を取得します

var results = _.filter( this.models, function ( model ) {           
        if ( model.get('id_beds') == bed 
           && model.get('outDate') < date
           && model.get('inDate ') < date ) 
        return true ; 
        return false ;
    });

次に、アンダースコアを使用して結果をマップし、JSON のように変換します

results = _.map( results, function( model ) { return model.toJSON()  } );

最後に、結果のみを含む新しいバックボーン コレクションを返します

return new Backbone.Collection( results ) ;

必要に応じて、コレクション内のすべてのデータを保持するのではなく、フィルター処理されたデータのみを保持する場合は、コレクションをリセットし、上記のリターンをスキップする必要があります

this.reset( results ) ;        
于 2013-10-18T14:37:19.013 に答える