画像の簡単なリストと、クリックするたびにそれらの画像のサイズを変更するために使用するボタンがあります。この動作をいくつかの方法で実装しましたが、パフォーマンスと動作 (テンプレートの再レンダリング) に大きな違いがあります。私の質問は、Meteor でこれを実装するための推奨される方法は何ですか?
これは最小限の作業例です。実際には、画像はより識別しやすく、サイズの変更はさまざまなイベントからトリガーできます。
解決策 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: ???