У меня есть простой список изображений и кнопка, которую я использую для изменения размера этих изображений всякий раз, когда нажимается. Я реализовал это поведение несколькими способами, и есть существенные различия в производительности и поведении (перепрофилирование шаблонов). Мой вопрос в том, что является предпочтительным способом реализации этого в Метеор?Как эффективно изменить стиль нескольких элементов
Это минимальный рабочий пример. На самом деле изображения могут быть лучше идентифицированы, и изменение размера может быть вызвано из разных событий.
Раствор 1 (Демонстрационный путь = медленная/повторной визуализация):
Template.controls.events = {
"click #change_size": function() {
Session.set("height", "20px");
}
};
<template name="image">
<img src="img.jpg" style="height: {{height}}"/>
</template>
Template.image.height = function() {
return Session.get("height");
};
Решение 2 (Jquery + состояние):
Template.controls.events = {
"click #change_size": function() {
Session.set("height", "20px");
}
};
<template name="image">
<img src="img.jpg"/>
</template>
Meteor.autorun(function() {
$("img").css({height: Session.get("height")});
})
Раствор 3 (JQuery):
Template.controls.events = {
"click #change_size": function() {
$("img").css({height: "20px"});
}
};
<template name="image">
<img src="img.jpg"/>
</template>
Решение 4 (реактивный родитель):
Template.controls.events = {
"click #change_size": function() {
Session.set("height", "20px");
}
};
<template name="image_set">
{{#each image_set}}
<img src="img.jpg" style="height: {{../height}}"/>
{{/each}}
</template>
Template.image_set.height = function() {
return Session.get("height");
};
Решение 5: ???
У меня есть несколько изображений. $ ("img") обрабатывает также кратные изображения. Как и # 1, который обрабатывает каждое изображение отдельно, но использует глобальные данные, хранящиеся в переменной сеанса. Как я добавил в вопросе - # 1 медленно, когда задействовано много элементов. – Xyand