2016-05-17 11 views
2

日付にフィルタリングするコレクションを動的に購読しようとしています。日付の範囲を指定した動的サブスクリプメーター

私のサーバー・コードは私のクライアントコードは、私がCHだから、これ

var desdeVar, hastaVar, skipVar; 
 
skipVar = new ReactiveVar(0); 
 
desdeVar = new ReactiveVar('NA'); 
 
hastaVar = new ReactiveVar('NA'); 
 

 
Template.caja.onCreated(function() { 
 
    var self; 
 
    self = this; 
 
    return self.autorun(function() { 
 
    var desde, hasta, skip; 
 
    skip = skipVar.get(); 
 
    desde = desdeVar.get(); 
 
    hasta = hastaVar.get(); 
 
    return self.subscribe('caja', skip, desde, hasta); 
 
    }); 
 
}); 
 

 
Template.caja.events({ 
 
    'change #hasta': function(e, t) { 
 
    var hasta; 
 
    hasta = new Date($('#hasta').val()); 
 
    return hastaVar.set(hasta); 
 
    }, 
 
    'change #desde': function(e, t) { 
 
    var desde; 
 
    desde = new Date($('#desde').val()); 
 
    desdeVar.set(desde); 
 
    return console.log(desdeVar.get()); 
 
    } 
 
});

のように見えるこの

Meteor.publish('caja', function(skip, desde, hasta) { 
 
    if (desde && hasta === 'NA') { 
 
    return Cajas.find({}, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } else if (hasta === 'NA') { 
 
    return Cajas.find({ 
 
     fecha: { 
 
     $gte: new Date(desde) 
 
     } 
 
    }, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } else { 
 
    return Cajas.find({ 
 
     fecha: { 
 
     $gte: new Date(desde), 
 
     $lte: new Date(hasta) 
 
     } 
 
    }, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } 
 
});

のように見えますクライアントに設定された期間に動的に登録したい日付を設定します。

私には何が欠けていますか?

+0

好奇心が強いです! {{#each}}を使用して簡単にUIの購読データを取得しているかどうか確認してください。データを取得していない場合は、「onCreated()」のサブスクリプションで問題が発生します。 –

+0

私は実際には購読されたデータを投げるテーブルがありますが、日付でフィルタリングしようとすると、データは同じままです。 – Orozcorp

答えて

0

プロパティ値が変更されたとき(たとえば、日付の値)にテンプレートが再実行されていることを確認したい場合があります。もしあなたが(テンプレートヘルパー関数の反応的なvarなどにフィールド値を保存していない限り)追跡されていないhtml入力値を変更し、テンプレート/クエリを強制的に再実行しないならば、イベントをキャッチし、テンプレートを無効にして強制的に再レン​​ダリングします。トリプルするためにdeps.changed()を設定することができる下記を参照してください。

how to make a meteor template helper re-run/render after another template has rendered?

+0

サブスクリプションは文字列と数値の値では動作しますが、日付では動作しません。日付は問題 – Orozcorp

+0

$ですか? fetchaが日付/時刻である場合、おそらくfetchaが日付/時刻であるかどうかを確認するためにCajas.find({$と:{{ fecha:{$ gte:new Date(desde)}、fetcha:{$ lte:new Date(hasta)} }} – JCoreTech

+0

同じ日にフィルタリングすると、T23までの時間を設定する必要があるかもしれません。59:59 – JCoreTech

0

私は、アイブ氏が作った2つのダムのミスをチェックした後、それを解決しました。 desdeとhastaは別々に等しいTU「NA」でなければならなかった

Meteor.publish('caja', function(skip, desde, hasta) { 
 
    if (desde == 'NA' & hasta == 'NA') { 
 
    return Cajas.find({}, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } else if (hasta === 'NA') { 
 
    return Cajas.find({ 
 
     fecha: { 
 
     $gte: new Date(desde) 
 
     } 
 
    }, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } else { 
 
    return Cajas.find({ 
 
     fecha: { 
 
     $gte: new Date(desde), 
 
     $lte: new Date(hasta) 
 
     } 
 
    }, { 
 
     skip: skip, 
 
     limit: 25, 
 
     sort: { 
 
     fecha: 1 
 
     } 
 
    }); 
 
    } 
 
});

第二に、私は、サーバーの代わりに、クライアントとサーバーに()だけ新しい日付を使用。

ご不便をおかけして申し訳ありません。

関連する問題