Dopdownlist заполняется ограниченными значениями вместо значений из общей коллекции
У меня есть выпадающий список в качестве фильтров, а затем общее количество сообщений с лимитом отображения только 4 одновременно, если не нажать кнопку «Загрузить еще», чтобы показать еще 4 записи. Проблема в том, что выпадающий список также загружает значения только из первых 4 записей.
Вот моя публикация
Meteor.publish('allJobs', function(limit){
if(!limit){
return Jobs.find();
}
return Jobs.find({}, {limit: limit});
});
моя основная подписка в контроллере
waitOn: function() {
return Meteor.subscribe("allJobs",4,this.findOptions());
},
помощники по шаблону
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"));
});
});
Я попытался сделать еще одну подписку для этого, но это не сработало. Пожалуйста, помогите с лучшим решением.
шаблон
<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>
Пожалуйста, помогите, я застрял в этой ситуации
Обновленный файл JS
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;
};
// шаблон созданной функции
Template.jobsList.onCreated(function(){
limit.set(4);
limit.set("chosenCategory");
});
// Вспомогательная функция шаблона
Template.jobsList.helpers({
"displayedJobs": function() {
return filterAndLimitResults(Jobs.find(), (limit.get()));
},
'moreResults': function(){
return !(Jobs.find().count() < limit.get());
}
});
Раскрывающаяся фильтрация кликов
Объявление в предоставленной функции
Template.jobsList.onRendered(function(){
limit.set(4);
chosenCategory.set();
});
И событие click выглядит следующим образом
"click .categoryselection": function(e, t){
e.preventDefault();
chosenCategory.set(chosenCategory.get());