如何在重绘中保留Mithril中的DOM元素

时间:2015-11-08 22:11:22

标签: mithril.js virtual-dom

我想在Mithril中找到在重绘期间保留DOM元素的最佳做法。

我有一个iframe,其中包含naviagtion的链接作为其内容。 我需要在Mithril的重绘中保留这个iframe。

我已经尝试了以下解决方案,其中iframe正在使用它的redraw.stategy设置为' none'在compoent的控制器功能中。

var iframeComponent = {
     controller: function() {
         m.redraw.strategy("none") 
     },

     view: function() {
              return m('.backpane-container', [
        m('iframe#bpaneId.backpane-frame[frameborder=0][scrolling=yes]', {

          'src': url,
          'config': configureBackPane.bind(this, controller)
        }),

      ]);
     }

但是,iframe似乎在重绘中发生了变化:

这是保留DOM元素的正确方法吗?还是有一个 实现这一目标的另一种方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:3)

在您的情况下,您可以使用key - 属性来保留iframe元素。它将DOM节点连接到vDOM节点。因此,即使它们改变位置,节点也会移位到位,不会重新创建。

请参阅here了解更多详情

答案 1 :(得分:0)

我更改了将iframe添加到虚拟DOM的兄弟元素的顺序。这导致diff引擎重绘。

更改呈现DOM元素的顺序解决了我的问题。