O Dopdownlist está sendo preenchido com valores limitados em vez de valores da coleção total
Eu tenho uma lista suspensa como filtros e, em seguida, há o total de postagens com um limite de exibição de apenas 4 por vez, a menos que um botão carregar mais seja clicado para mostrar outros 4 registros. O problema é que a lista suspensa também está carregando valores apenas dos primeiros 4 registros.
Aqui está a minha publicação
Meteor.publish('allJobs', function(limit){
if(!limit){
return Jobs.find();
}
return Jobs.find({}, {limit: limit});
});
minha assinatura principal no controlador
waitOn: function() {
return Meteor.subscribe("allJobs",4,this.findOptions());
},
ajudantes para o modelo
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"));
});
});
Eu tentei fazer outra assinatura para isso, mas não deu certo. Por favor, ajude com uma melhor solução.
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, ajude, eu estou preso nesta situação
Arquivo js atualizado
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;
};
// função criada pelo modelo
Template.jobsList.onCreated(function(){
limit.set(4);
limit.set("chosenCategory");
});
// Função auxiliar de modelo
Template.jobsList.helpers({
"displayedJobs": function() {
return filterAndLimitResults(Jobs.find(), (limit.get()));
},
'moreResults': function(){
return !(Jobs.find().count() < limit.get());
}
});
Filtragem de clique suspenso
Declarando na função renderizada
Template.jobsList.onRendered(function(){
limit.set(4);
chosenCategory.set();
});
E o evento click é o seguinte
"click .categoryselection": function(e, t){
e.preventDefault();
chosenCategory.set(chosenCategory.get());