javascript - 像 pat-pickadate 这样的 Plone5 Mockup 小部件不适用于动态生成的内容

标签 javascript ajax requirejs plone plone-5.x

在 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 添加和编辑 View 根本不再(Plone5)显示日历小部件。

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

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

我找不到关于此主题的任何文档或示例。谁能给我指明正确的方向,好吗?

最佳答案

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

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

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

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

关于javascript - 像 pat-pickadate 这样的 Plone5 Mockup 小部件不适用于动态生成的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688167/

相关文章:

JavaScript 到 Java Applet 使用 Deploy Java.js 运行命令行

php - 传递回调参数ajax post

javascript - 如何使用 RequireJS 加载 Handlebars 运行时

Javascripts 地理定位 - 用户拒绝提供数据

javascript - 将 HTML 表单输入到表格中

ajax - 使用 Jquery 设置 ajax 请求的基本 url 的最佳方法是什么?

javascript - require.JS 的 backbone 如何工作?

javascript - 使用 RequireJS 时,我应该将脚本放在 Yeoman 项目的什么位置?

javascript - $compile 未定义

javascript - 查询。使用 ajax 调用在 .each 循环之后调用函数