jquery.on(" show.bs.modal",m.redraw)破坏了对话框

时间:2017-01-29 12:48:54

标签: twitter-bootstrap twitter-bootstrap-3 jquery-plugins bootstrap-modal mithril.js

我正在尝试将Twitter Bootstrap与Mithril一起使用。通常用Mithril包装的Bootstrap重新绘制对话框,但在"show.bs.modal"事件的处理程序中重绘会隐藏离开背景的对话框。即使使用setTimeout也无法解决,jquery.on("shown.bs.modal", () => setTimeout(m.redraw, 2000)); 应该提供不同的执行上下文。为什么以及如何解决?

这是一个简单的PoC。

要点:https://gist.github.com/173210/8c84966696276f1bfa3e298edb53da2b

Rawgit(工作演示):https://rawgit.com/173210/8c84966696276f1bfa3e298edb53da2b/raw/34b0ac625962ee830d63829107eeb0473c735375/poc.html

简而言之,这不起作用。

PreviewKeyDown

2 个答案:

答案 0 :(得分:0)

plot "outfile.dat" using 1:2仅适用于已加载componentsm.mountm.route

我对您的代码进行了一些更改: https://jsbin.com/wegeyi/edit?js,output

  • 如果我们将您的虚拟DOM代码放在组件视图中,并将m.redraw更改为m.render,我们可以将m.mount替换为f
  • 我添加了一个绘制计数器,表示代码正在按预期重新执行。
  • 可以在m.redraw selector argument
  • 中表达不属于classNametype等功能的DOM属性

答案 1 :(得分:0)

已解决:m.render会覆盖由className更改的$(element).modal("show"),因此您必须阻止此操作。您有两种选择:

  1. className之后获取$(element).modal("show")并将其反映到模型中。
  2. className为假时config设置initialized
  3. 我选择2.它看起来如下:

    m("div", {
      config(element, initialized) {
        if (!initialized) {
          element.className = "modal fade";
          $(element)
            .on("shown.bs.modal", () => setTimeout(m.redraw, 2000))
            .modal("show");
        }
      }
    }, conentOfTheModalDialog);
    
相关问题