Dopdownlist se rellena con valores limitados en lugar de valores de la colección total
Tengo una lista desplegable como filtros y luego están las publicaciones totales con un límite de visualización de solo 4 a la vez, a menos que se haga clic en el botón Cargar más para mostrar otros 4 registros. El problema es que la lista desplegable también está cargando valores solo de los primeros 4 registros.
Aquí esta mi publicación
Meteor.publish('allJobs', function(limit){
if(!limit){
return Jobs.find();
}
return Jobs.find({}, {limit: limit});
});
mi suscripción principal en el controlador
waitOn: function() {
return Meteor.subscribe("allJobs",4,this.findOptions());
},
ayudantes para la plantilla
Template.jobsList.helpers({
'allJobs': function(){
var filter ={};
var category = Template.instance().selectedCategory.get();
var city = Template.instance().selectedCity.get();
var jtype = Template.instance().selectedJobType.get();
if(jtype)
filter.jtype = jtype;
if(city)
filter.city = city;
if(category)
filter.ccategory = category;
return Jobs.find(filter);
},
'moreResults': function(){
return !(Jobs.find().count() < Session.get("jobsLimit"));
}
});
Template.jobsList.onRendered(function(){
Session.setDefault("jobsLimit", 4);
this.autorun(function(){
Meteor.subscribe("allJobs", Session.get("jobsLimit"));
});
});
Traté de hacer otra suscripción para esto, pero no funcionó. Por favor ayuda con una mejor solución.
Modelo
<template name="jobsList">
<div class="col s12 filter-holder">
<div class="col m4 s4 filter-box">
{{> categoryFilter}}
</div>
<div class="col m4 s4 filter-box">
{{> cityFilter}}
</div>
</div>
<div class="col s12">
<ul class="collection" id="listings">
{{#each allJobs}}
<li>
{{> jobItem}}
</li>
{{/each}}
</ul>
{{#if moreResults}}
<button class="load-more" id="showMoreResults" type="submit">Load More
<i class="mdi-content-send right"></i>
</button>
{{/if}}
</div>
</template>
Por favor ayuda, estoy atrapado en esta situación
Archivo js actualizado
var limit = new ReactiveVar;
var filterAndLimitResults = function (cursor, limit) {
if (!cursor) {
return [];
}
var chosenCategory = limit.get("chosenCategory");
var raw = cursor.fetch();
// filter category
var filtered = [];
if (!chosenCategory || chosenCategory == "") {
filtered = raw;
} else {
filtered = _.filter(raw, function (item) {
return item.category === chosenCategory;
});
}
if (limit) {
filtered = _.first(filtered, limit);
}
return filtered;
};
// plantilla creada función
Template.jobsList.onCreated(function(){
limit.set(4);
limit.set("chosenCategory");
});
// Función auxiliar de plantilla
Template.jobsList.helpers({
"displayedJobs": function() {
return filterAndLimitResults(Jobs.find(), (limit.get()));
},
'moreResults': function(){
return !(Jobs.find().count() < limit.get());
}
});
Filtro de clic desplegable
Declarando en función renderizada
Template.jobsList.onRendered(function(){
limit.set(4);
chosenCategory.set();
});
Y el evento de clic es el siguiente
"click .categoryselection": function(e, t){
e.preventDefault();
chosenCategory.set(chosenCategory.get());