Я использую ReactiveDict
, чтобы изменить состояние и стиль одного или нескольких шаблонов. Я хотел бы сохранить id
каждого выбранного шаблона в массив, который затем можно использовать в методе. Прежде чем я инициирую это событие, пользователь должен иметь возможность добавлять и удалять любые id
из массива, пока не будет определено окончательное.Временное хранение массива в Метеор
Как создать массив со всеми id
s, у которого template.instance().state
установлено значение isSelectedId
?
Я думал, что могу использовать array.push()
для каждого щелчка и сохранять в переменной сеанса, но переменная Session не изменяется. У меня также нет способа удалить конкретный id
, если он не выбран. Я также рассматривал сохранение в коллекции, но мне нужно только временное хранилище.
EDITED КОД ВКЛЮЧИТЬ ЧАСТЬ ОТВЕТА С ПОМОЩЬЮ Краеведение
<template name="App">
<div id="app-inner">
{{#each companies}}
{{>Company}}
{{/each}}
</div>
</template>
<template name="Company">
<div class="company {{isSelected}}">
<a>Company: {{companyName}}</a>
</div>
</template>
Template.App.helpers({
companies: function() {
return Companies.find({});
}
});
Template.Company.events({
'click .company': function(e) {
var state = Template.instance().state.get('isSelectedId');
var id = this._id;
var count = localSelections.find().count();
if(count === 0) {
var localId = localSelections.insert({});
}
console.log("Local ID: ", localId);
switch (state) {
case null:
Template.instance().state.set('isSelectedId', this._id);
localSelections.update({_id:localId},{$push:{select:id}});
break;
case id:
Template.instance().state.set('isSelectedId', null);
localSelections.update({_id:localId},{$pull:{select:id}});
break;
}
}
});
Template.Company.helpers({
'isSelected': function() {
return this._id === Template.instance().state.get('isSelectedId') ? 'is-selected' : '';
}
});
Template.Company.onCreated(function() {
this.state = new ReactiveDict;
this.state.set('isSelectedId', null);
});
//client/collections
localSelections = new Mongo.Collection(null);
Meteor.methods({
valuationAdd: function(array) {
check(array, Array);
Valuations.insert({selections:array});
}
});
Спасибо, Мишель, как всегда, это должно отлично работать. Я пересмотрел свой код выше, чтобы показать свой прогресс. Тем не менее, один вопрос - мне нужно сохранить идентификаторы в массиве в одном документе. Приведенный выше код создает документ и добавляет идентификатор для первого щелкнутого элемента ('console.log (localId)' правильно возвращает созданный идентификатор). Но он не может читать 'localId' для последующих кликов. Должен ли я или я могу создать этот документ где-то вне обработчика событий? – Bren
Я * считаю, что вы пытаетесь отследить '' идентификаторы ваших документов 'Company'. Вы можете просто 'localSelections.insert ({_ id: this._id})' и создать совпадение 1: 1 с вашими документами 'Company'. –
Спасибо, да, просто отслеживание '_id' 'документов компании. Я думал, что сохраню шаг, просто сохранив его в один локальный документ, но я могу использовать отдельные документы, а затем потом каждый раз вводить «id» в массив. Все отлично работает. – Bren