0

我在 Meteor 应用程序中有一个表单,其中包含可由 Bootstrap 手风琴访问的单选按钮列表。我已经在流星中实现了一个验证路由,它将类插入到输入元素中以将它们标记为有效/无效。

问题是:每当一个输入元素的验证状态发生变化时,都会重新绘制模板并且当前打开的手风琴关闭。

我通过这种笨拙的方法解决了这个问题:

Meteor.startup(function() {
    // track collapse state of accordion....
$('.collapse').on('shown', function() {
    Session.set(addBookingCollapse, $(this).attr('id'));
});
});

Template.addrecord.helpers({
    openAccordion: function(accordion) {
        if (Session.get(addBookingCollapse) == accordion) {
            return 'in'
        };
    }
});

<div id="collapseOne" class="accordion-body 
collapse {{openAccordion 'collapseOne'}}">

...对于其他四个可折叠元素,依此类推

但是为了谁,必须有一个更优雅的解决方案?我不想为此浪费会话变量....

4

2 回答 2

1

将输入元素放在{{#isolate}}{{\isolate}}块中可能有助于避免重新渲染整个模板。见:流星隔离

于 2013-12-06T10:18:31.390 回答
0

我还没有真正仔细研究过您的代码/问题,但是为什么您要使用 id 来单独针对它们中的每一个?为什么不像这样为所有人使用一个类:

$('.a-class-that-you-name').on('shown', function() {
    var thisSpecificId = $(this).attr('id');
    Session.set('addBookingCollapse', thisSpecificId);
});

那行得通吗?

于 2013-06-14T06:31:00.207 回答