2016-05-17 116 views
2

我试图动态订阅按日期过滤它们的集合。动态订阅日期范围流星

我的服务器代码看起来像这样

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

我的客户端代码看起来像这样

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

所以,当我CH ange我想动态订阅客户端中建立的日期范围的日期。

我错过了什么?

+0

只是好奇!您可以通过简单的{{#each}}来检查您是否在UI上获取订阅数据。如果您没有收到任何数据,则问题在于“onCreated()”中的描述。 –

+0

我是,实际上下面有一个表引发订阅的数据,但是当我尝试按日期过滤时,数据仍然保持不变。 – Orozcorp

回答

0

当属性值发生变化(例如您的日期值)时,您可能想检查您的模板是否正在重新运行。如果您更改了未被跟踪的HTML输入值,并且不会强制您的模板/查询重新运行(除非您将字段值保存在模板帮助函数的反应变量等中),则需要捕捉事件并使模板无效以强制重新渲染。看下面你可以在哪里设置deps.changed()来触发;

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

+0

该订阅适用于字符串和数字值,但不适用于日期。日期问题 – Orozcorp

+0

$和? Cajas.find({$和:[{$ gte:new Date(desde)},fetcha:{$ lte:new Date(hasta)} – JCoreTech

+0

}或者如果fetcha是日期/时间并且可能在同一天过滤,可能需要设置时间到T23:59:59 – JCoreTech

0

我检查2个愚蠢的错误,我表现的后解决了这个问题。

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

凡desde和闪现了必须另外等于TU“NA”,

其次,我在服务器上,而不是在客户端和服务器只使用新的Date() 。

不便之处