如何让模式小部件在 iframe 叠加层中工作

How to get patterns widgets to work in an iframe overlay

我在 Plone 4.3.6 站点上有一些 "classic" 磁贴,其中包含一个 richtext 字段和两个使用 plone.formwidget.contenttree 小部件的 RelationChoice 字段。 我已经安装了 plone.app.widgets 1.8.0(连同 p.a.contenttypes),但我无法让新的 TinyMCE 和新的 relateditems 模式小部件正常工作。如果我直接加载平铺视图 URL(在 @@edit-tile/.... URL),小部件实际上会显示并正常工作。但在 iframe/overlay 中,他们没有。

prep-overlay 看起来像这样:

  jQuery('.tile-editable').each(function () {
      jQuery(this).find('a.tile-edit-link, a.tile-delete-link').
          prepOverlay({
          subtype: 'iframe',
          config: {
              onLoad: function (e) {
                jQuery('body').addClass('noscroll');
                return true;
              },
              onClose: function() {
                jQuery('body').removeClass('noscroll');
                location.reload();
              }
          }
      });
  });

iframe 在 header 中加载 ++resource++plone.app.widgets.js,并且按预期为字段提供 pat-relateditemspat-tinymce 类。但是 relateditems 模式中的 init 方法永远不会被调用。我想 iframe DOM 没有针对模式进行解析,但我不知道去哪里寻找造成这种情况的原因。 FWIW,控制台出现错误:

Uncaught Error: Mismatched anonymous define() module: function (){return eb}
http://requirejs.org/docs/errors.html#mismatch

在 plone.app.widgets.js:166 中,但我不知道这是从哪里来的,或者它是否重要。

是否有任何技巧可以让模型小部件在 ifram 叠加层中工作?

要重新初始化所有模式,您可以执行以下操作:

var registry = require("pat-registry");
registry.scan(SELECTOR);  // document or iframe or wherever you want to rescan all patterns. 

恕我直言,您可以在 onLoad 方法上执行此操作。