Twitter bootstrap jquery.on(“show.bs.modal”,m.redraw)会破坏对话框
我正试着用Twitter引导Mithril。通常使用Mithril包装的引导程序重新绘制对话框是可行的,但是在Twitter bootstrap jquery.on(“show.bs.modal”,m.redraw)会破坏对话框,twitter-bootstrap,twitter-bootstrap-3,jquery-plugins,bootstrap-modal,mithril.js,Twitter Bootstrap,Twitter Bootstrap 3,Jquery Plugins,Bootstrap Modal,Mithril.js,我正试着用Twitter引导Mithril。通常使用Mithril包装的引导程序重新绘制对话框是可行的,但是在“show.bs.modal”事件的处理程序中重新绘制会隐藏离开背景的对话框。即使使用setTimeout,也无法解决此问题,因为它应该提供不同的执行上下文。为什么以及如何修复它 这里是一个简单的PoC 要点: Rawgit(工作演示): 简言之,这是行不通的 jquery.on("shown.bs.modal", () => setTimeout(m.redraw, 2000))
“show.bs.modal”
事件的处理程序中重新绘制会隐藏离开背景的对话框。即使使用setTimeout
,也无法解决此问题,因为它应该提供不同的执行上下文。为什么以及如何修复它
这里是一个简单的PoC
要点:
Rawgit(工作演示):
简言之,这是行不通的
jquery.on("shown.bs.modal", () => setTimeout(m.redraw, 2000));
m.redraw
仅适用于已安装或的
我对您的代码做了一些更改:
- 如果我们将虚拟DOM代码放在组件视图中,并将
更改为m.render
,那么我们可以将m.mount
替换为f
李>m.redraw
- 我添加了一个draw计数器,以指示代码按预期重新执行
- 非函数的DOM属性,如
、className
等,可以在type
m()中表示
m.render
覆盖类名
,该类名被$(element.modal(“show”)
更改,因此必须防止出现这种情况。您有两个选择:
$(element.modal(“show”)
之后获取className
,并将其反映到模型中initialized
为false时,在config
中设置className
m("div", {
config(element, initialized) {
if (!initialized) {
element.className = "modal fade";
$(element)
.on("shown.bs.modal", () => setTimeout(m.redraw, 2000))
.modal("show");
}
}
}, conentOfTheModalDialog);
谢谢,我对PoC应用了一些更改。但是它并不能解决问题。我认为问题在于你不能使
setTimeout(m.redraw)
工作。如果你看一下,你会发现这个数字在2秒后会增加(而且每次你点击这个按钮都会增加一次)。还缺少什么?