В идеале, это будет запускать код только при первом выборе элемента в раскрывающемся списке, а не после него
В вашем случае для решения этой проблемы не требуется никакой специальной магии,По сути, вам нужна структура, которая позволяет запускать метод только один раз.
Входными данными для этой структуры является ваш список modules
.Кэш, который проверяет, был ли загружен модуль, является объектом.Рассмотрим следующий список имен модулей и пустой объект:
Template.yourTemplate.onCreated(function() {
const instance = this;
instance.state = new ReactiveDict();
instance.state.set('modules', ['a', 'b', 'c']);
instance.state.set('loaded', {});
});
Вы можете загрузить модуль и затем добавить запись в объект, который был загружен модулем:
// outside the template functions
function loadOnce(module, templateInstance) {
const loaded = templateInstance.state.get('loaded');
// return if already loaded
if (loaded[module]) return;
// else load module and set as loaded
Session.set("Assessment_name", module_name)
loaded[module] = true;
templateInstance.state.set('loaded', loaded);
}
Template.yourTemplate.events({
"change #module-select": function(event, template){
var module_name = $(event.currentTarget).val()
loadOnce(module_name, template);
}
});
Теперь это может решить проблему с загрузкой один раз, но может не решить проблему, поскольку ваш список выбора по-прежнему содержит элементы для выбора.
Так что, если вы хотите удалить элементы из опций, вы можете такжеудалите элемент из массива modules
.Тогда он больше не будет доступен для выбора.
function loadOnce(module, templateInstance) {
const loaded = templateInstance.state.get('loaded');
const modules = templateInstance.state.get('modules');
// return if already loaded
if (loaded[module]) return;
// else load module and set as loaded
Session.set("Assessment_name", module_name)
loaded[module] = true;
modules.splice(modules.indexOf(module), 1);
templateInstance.state.set('loaded', loaded);
templateInstance.state.set('modules', modules);
}
Общее замечание по безопасности: это не помешает клиентам загружать модули, если они намерены.Это только функциональность UI / UX, но она не остановит загрузку модуля при желании.