【问题标题】:Meteor: Bootstrap Modal breaks when handlebars values changeMeteor:当车把值改变时,Bootstrap Modal 会中断
【发布时间】:2014-04-13 21:51:35
【问题描述】:

我正在制作一个模式来处理付款,我想使用一些车把助手来进行表单验证。

这是html:

<div class="modal fade" id="paymentModal" tabindex="-1" role="dialog" aria-labelledby="paymentModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
                <form id="paymentModalForm" class="form-horizontal">
                    ...
                    <div class="form-group">
                        <div class="col-xs-offset-3 col-xs-9">
                            <!-- this session helper is a go-between with Session -->
                            <button {{session 'paymentFormInputsValid'}} type="submit" class="btn btn-primary">
                                Make Payment
                            </button>
                        </div>
                    </div>
                    ...
                </form>
            </div>
        </div>
    </div>
</div>

这是后台js:

Template.paymentModal.events({
    'keyup .paymentFormInput': function(e, t) {
        var valid = t.findAll('.paymentFormInput').every(function(item) {
            return !!item.value.trim();
        });
        Session.set('paymentFormInputsValid', valid ? '': 'disabled');
    }
});

paymentFormInputsValid 设置正确,但是当keyup 事件发生时,模式消失,黑色的.modal-backdrop 仍然存在并且不允许任何更改。它只是将用户锁定在外,并且必须刷新页面。

另外,我之前有一个带有更多语义把手的按钮,像这样:

<button {{#unless session 'paymentFormInputsValid'}}disabled{{/unless}}
    type="submit" class="btn btn-primary">
    Make Payment
</button>

但这破坏了提交按钮,并使其显示如下:

非常破碎。

如何让模态框与车把搭配得很好?我是否应该为此表单采用不同的策略?

提前致谢!

更新

我现在将这个解决方案拼凑在一起。正在插入我的模态的模板:

<template name="paymentModalButton">
    <button type="submit" class="btn btn-primary" {{paymentFormInputsValid}}>
        Make Payment
    </button>
</template>

<!-- In the appropriate place -->
<div class="form-group">
    <div class="col-xs-offset-3 col-xs-9">
        {{> paymentModalButton}}
    </div>
</div>

但是,这仍然无法处理车把{{#if}} 块,例如我想要使用的那个:

{{#unless session 'paymentFormInputsValid'}}disabled{{/unless}}

这仍然会破坏按钮呈现。拥有这种行为会更容易,更符合语义,所以如果有人能弄清楚那将是令人愉快的。

更新

我研究了Elements,这是那个按钮的样子。

<button <!--data:8trm3tvlatwn9qaw9--=""> type="submit" class="btn btn-primary"&gt;
    Make Payment
</button>

坦率地说,我无法理解这一点以及它为什么会崩溃。它是由此生成的,它是有效的并且在其他情况下有效:

<button {{#unless session 'paymentFormInputsValid'}}disabled{{/unless}} type="submit" class="btn btn-primary">
    Make Payment
</button>

谢谢!

【问题讨论】:

  • 你尝试过使用 {{#constant}} 块
  • 我正在研究这个,没想到!
  • 虽然不是直接的解决方案,但您可以考虑改用 Crater modals,它们旨在更好地与 Meteor 配合使用。
  • @HubertOG,我认为这是一个很酷的库,但我已经在引导程序中拥有了所有内容,我希望保持外观一致。如果我刚开始布局,我可能会使用 Crater。
  • @pahan,{{#constant}} 块导致模态标记被分解成碎片,因此其中一些呈现在父页面而不是模态中。围绕整个事情做常量会破坏目的,因为我试图获得反应。

标签: twitter-bootstrap modal-dialog meteor


【解决方案1】:
<div class="modal fade" id="paymentModal" tabindex="-1" role="dialog" aria-labelledby="paymentModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
                 {{> someOtherTemplate}}

在新的 blaze 用户界面出现之前,这是一个 hack。

失败的原因是因为模板一改,整个模板就重绘了,但是没有应用twitter引导代码。

【讨论】:

  • {{unless}} 块破坏 html 并导致按钮呈现奇怪的任何想法?
  • @blaineh 发布那个坏按钮的 DOM 是什么样子的。其他人在元素内的模板助手方面也遇到了类似的问题。
  • 好的,我已经添加了那个按钮的 DOM。你能理解为什么会这样吗?
  • @blaineh &lt;!--data:8trm3tvlatwn9qaw9--=""&gt; 与其他人遇到的问题完全相同。我没有该问题的链接,但根据某人的回复,据说这个问题已通过新的 blaze UI 得到解决。
  • 好的,与此同时,我会保留所有必要的 hacks!
【解决方案2】:

下面是一个将 Bootstrap modal 与 Meteor 的 Spark 渲染引擎一起使用的示例: http://modal-example.meteor.com/

来源: https://github.com/alanning/meteor-modal-example

正如@BradM 指出的那样,一旦 Blaze(Meteor 的新渲染引擎)发布,这种事情有望不会成为问题。

【讨论】:

  • 阿兰宁,这真的很酷!它可以做显示表单之类的事情吗?我是否可以将dialogmessage 属性声明为类似于Template.template()
  • 一个更好的问题是,如果任何对话框中有更改的把手,bootbox 是否仍然可以工作?
  • 绝对可以显示表格;单击用户名以查看“管理权限”表单。基本上表单模板始终包含在父模板中,因此反应性有效,但在需要之前一直隐藏。会话变量用于识别目标用户 ID。我在“Template.editRolesForm.rendered”中填充表单数据以处理不断变化的数据,因为反应性会导致模板重新呈现。请务必检查来源以获取详细信息。
  • 当我问到他们展示表单时,我心不在焉,我真正的意思是模板。请参阅我的其他问题,我一直无法让他们合作:stackoverflow.com/questions/22418592/…
猜你喜欢
  • 2016-02-16
  • 2013-11-21
  • 2023-03-25
  • 2014-04-05
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多