6

假设 plone 5 页面模板中有以下愚蠢的代码片段:

<input id="foo" class="pat-pickadate" />

<input id="bar" />

<script type="text/javascript" >
       $('#bar').click( function () {
            $('#bar').addClass("pat-pickadate");
       });
</script>

您将获得两个输入。第一个是一个不错的日历输入,第二个在开始时是空的。单击第二个输入后,其类将设置为“pat-pickadate” - 就像第一个一样 - 但不呈现日历。

我在尝试查找原因时遇到了这个问题,为什么我的 jquery-UI 覆盖显示 plone 添加和编辑视图不再(Plone5)显示日历小部件。

这种行为是有意的吗?如果是这样,在 Plone 5 中通过 AJAX 调用动态获取的表单中使用模型小部件的正确方法是什么?是否有一些神奇的电话可以通知 Mockup 机器的 DOM 更改?

我读到 Mockup 有它自己的覆盖技术,但是很难仅仅为了获得一个简单的小部件而重写大约 600 行复杂的 JS 代码。

我找不到有关此主题的任何文档或示例。任何人都可以让我朝着正确的方向前进吗?

4

1 回答 1

3

模式在加载时初始化,如果你的 DOM 发生变化并包含应该使用模式呈现的新元素,你需要调用Registry.scan.

为此,您需要像这样更改脚本:

require([
    'jquery',
    'pat-registry'
], function($, Registry) {
    $('#bar').click( function () {
        $('#bar').addClass("pat-pickadate");
        Registry.scan($('#bar'));
    });
})

该脚本不能是内联的,因为无法保证 JQuery 和/或 require 已经加载。因此,将您的代码放在一个单独的 JS 文件中,并确保使用以下两种方式之一将其加载到您的页面中:

于 2016-02-29T12:46:59.333 回答