Bootstrap Popovers与ember.js模板

Ori*_*vit 7 twitter-bootstrap ember.js

我试图用引导酥料饼与EmberJS,使酥料饼的内容将是一个余烬/车把模板(与结合等).如何才能做到这一点?(Ember 1.0.0-rc2)

Rob*_*ert 12

这是一个ember bootstrap popover的工作示例(请参阅http://jsfiddle.net/72fSd/):

App.Popover = Ember.View.extend({
        parentSelector: '',
        contentSelector: '',
        didInsertElement: function () {
            var self = this;
            $(self.parentSelector).popover({
                html: true,
                content: function() {
                    var $content = $(self.contentSelector);
                    return $content.html();
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

实例化视图:

{{view App.Popover templateName="my-popover-content" parentSelector=".popoverButton" contentSelector="#popovercontent"}}
Run Code Online (Sandbox Code Playgroud)

这里,parentSelector可以例如选择一个按钮.确保在my-popover-content模板中有一个id为#popovercontent的div容器,以便contentSelector工作.当然,您需要在初始化视图之前加载模板.

双向绑定应该与该解决方案一起使用.


小智 7

我进一步考虑了Terry的答案,并认为我已经提出了一个简单,通用的解决方案来解决这个问题.

我创建了一个bootstrap-popover组件,如下所示:

App.BootstrapPopoverComponent = Ember.Component.extend({
  tagName: 'div',      //whatever default you want... div is default anyway here
  classNames: '',      //whatever default you want
  placement: 'bottom', //whatever default you want
  didInsertElement: function () {
    var component = this,
        contents = this.$('.popoverJs');
    component.$().popover({
      animation: false,
      placement: component.get('placement'),
      html: true,
      content: contents
    }).on('show.bs.popover', function () {
      contents.removeClass('hide');
    });
  },
  willDestroyElement: function () {
    this.$().popover('destroy');
  }
});
Run Code Online (Sandbox Code Playgroud)

这是关联的模板:

<script type="text/x-handlebars" id="components/bootstrap-popover">
  {{title}}
  <div class="popoverJs hide">
    {{yield}}
  </div>
</script>
Run Code Online (Sandbox Code Playgroud)

注意使用"hide"类来隐藏最初产生的内容.这个类只是"display:none".如果没有这个,事情就不会像你希望的那样发挥作用.

一旦你有了这个,只要你想要一个popover,你就可以做这样的事情:

  {{#bootstrap-popover title="My Fancy Popover" tagName="button"}}
    <ul>
      <li>my</li>
      <li>awesome</li>
      <li>popover</li>
      <li>contents</li>
      <li>example</li>
    </ul>
  {{/bootstrap-popover}}
Run Code Online (Sandbox Code Playgroud)

内容应该是你想要的任何东西 - 任意HTML,渲染组件或部分等等.当然,你可以根据需要指定其他tagNames,classNames,title,placement等.

我希望这个解决方案有所帮