仪表:在Blaze中嵌入模板

时间:2015-09-23 20:16:09

标签: meteor meteor-blaze

使用Bootstrap和Meteor / Blaze,我试图使用模板助手动态控制模板的大小。我想要一个按钮在 col-md-4 col-md-12 之间切换。硬编码的列大小调整如下:

<div class="panel-body">
  <div class="row">
   {{#each articles}}
      <div class="col-md-4">
         {{> article this}}
      </div>
   {{/each}}
 </div>

我有一个模板帮助器,它返回 div ,发现我需要一个关闭帮助器调用,或者Meteor可能会抱怨不平衡&lt; \ div&gt; 。这看起来有点笨拙。

Template.articles.helpers({
  format: function() {
      return '<div class="col-md-4">';
      // return '<div class="col-md-12">';
  },
  end_format: function() {
      return '</div>'
  }
});

标记是:

<div class="panel-body">
  <div class="row">
      {{#each articles}}
          {{{format}}}
              {{> article this}}
          {{{end_format}}}
      {{/each}}
   </div>
</div>

div 标签返回已关闭且为空,我想将标记包含在下方,如此屏幕截图所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

不要从模板助手返回HTML,通常有更好的方法。

为什么不从模板助手返回动态类名?

HTML

<div class="panel-body">
  <div class="row">
    {{#each articles}}
      <div class="{{columnSize}}">
        {{> article this}}
      </div>
    {{/each}}
  </div>
  <button type="button" class="btn btn-primary js-toggle-column-size">Toggle column size</button>
</div>

ES2015

Template.articles.onCreated(function(){
  this.largeColumns = new ReactiveVar(false);
});

Template.articles.helpers({
  columnSize(){
    const largeColumns = Template.instance().largeColumns.get();
    return largeColumns ? 'col-md-12' : 'col-md-4';
  }
});

Template.articles.events({
  'click .js-toggle-column-size'(event, template){
    const largeColumns = template.largeColumns.get();
    template.largeColumns.set(!largeColumns);
  }
});