像pat-pickadate这样的Plone5样机小部件不适用于动态生成的内容 [英] Plone5 Mockup Widgets like pat-pickadate not working for dynamically generated content

查看:92
本文介绍了像pat-pickadate这样的Plone5样机小部件不适用于动态生成的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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代码.

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

解决方案

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

要做到这一点,您将需要像这样更改脚本:

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

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆