8

我正在尝试让 Bootsrap 的模式工作,但是当我单击按钮时,我得到的只是一个黑屏,没有出现我期望的模式对话框。我正在使用流星。

这是我的代码:

<div class="container">
    <h2>Example of creating Modals with Twitter Bootstrap</h2>
    <div class="modal hide fade in" id="example" style="display: none; ">
        <div class="modal-header">
            <a class="close" data-dismiss="modal">×</a>
            <h3>This is a Modal Heading</h3>
        </div>
        <div class="modal-body">
            <h4>Text in a modal</h4>
            <p>You can add some text here.</p>
        </div>
        <div class="modal-footer">
            <a class="btn btn-success" href="#">Call to action</a>
            <a class="btn" data-dismiss="modal" href="#">Close</a>
        </div>
    </div>
    <p><a data-toggle="modal" href="#example" class="btn btn-primary btn-large">Launch
        demo modal</a></p>
</div>

出于测试目的,我基本上从以下网址获得了代码:http ://www.w3resource.com/twitter-bootstrap/modals-tutorial.php。

4

4 回答 4

8

我有一个类似的问题。问题在于 Meteor 和 Bootstrap 工作方式的根本区别。Meteor 假定标记可以随时重新加载。如果任何实时变量发生变化,Meteor 只会重新加载模板。另一方面,Bootstrap 假设模板只会被加载一次,并且在运行时使用 javascript 对其进行修改。

正在发生的事情是流星正在加载我的模态模板。在某些时候,我正在单击某些东西,这会导致该模式出现在 javascript 中。然而,片刻之后,一个实时变量发生了变化,导致模板再次加载。由于模板隐藏了模式,它覆盖了只是试图显示模板的 javascript。

我通过将模态的内部放在与外部不同的模板中解决了这个问题。外部模板不响应任何实时变量,因此希望它永远不会被重新加载。

前:

<template name="modal">      
  <div class="modal hide fade in" id="settings-modal" data-backdrop="false">
    <div class="modal-header">
    ...
</template>

后:

<template name="modal">      
  <div class="modal hide fade in" id="settings-modal" data-backdrop="false">
    {{> modalInner}}
  </div>
</template>      

<template name="modalInner">
  <div class="modal-header">
    ...
</template>
于 2013-06-02T05:27:00.913 回答
4

这是一个示例应用程序,它展示了如何使用 Meteor 显示引导模式:

您可以在此处查看实时版本:

于 2013-12-17T23:58:57.343 回答
2

我已经找到了一个不错的解决方案——我的 Modal 是它自己的模板和一个会话变量控制它是否被显示。在它被“渲染”之后,我触发引导程序的 JS 来“打开”它。

...
{{#if getSession 'isRegisterConfirmation'}}
  {{> registerConfirm}}
{{/if}}
</template>

<template name="registerConfirm">
<div class="modal registerConfirmModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h3>Confirm Name / Info</h3>
  </div>
  <div class="modal-body">
    You are registering as
    ...

棘手的部分是将 Meteor 和 Bootstrap 之间的事件联系起来。

  • 在 Meteor 渲染 -> 触发 Bootstrap 模态显示
  • 在 Bootstrap Modal 上隐藏 -> 从 Meteor 清除会话变量

这实际上效果很好,这是我正在做的事情的简化版本......

Template.registerConfirm.rendered = function() {
  var thing = Session.get('thingToConfirm');
  $('.registerConfirmModal').on('hidden', function() {
    Session.set('thingToConfirm', '');
    Session.set('isRegisterConfirmation', false);
  });
  $('.registerConfirmModal').on('shown', function() {
    $('.registerConfirmModal button.confirm').focus();
  });
  $('.registerConfirmModal').modal('show');
};

然后触发模态就像将会话变量设置为true一样简单......所有其余的交换都基于事件。

于 2013-08-20T03:57:06.990 回答
0

我遇到了同样的问题。我从模态中删除了“隐藏”类,然后它就起作用了。 我还必须在同一个模板中包含模式以及激活它的链接。

代替

<div class="modal hide fade in" id="example" style="display: none; ">

尝试这个

<div class="modal fade" id="example" style="display: none;">
于 2013-05-04T20:09:58.007 回答