加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

twitter-bootstrap – xPages中的bootstrap 3的Eonasdan datetim

发布时间:2020-12-17 20:39:23 所属栏目:安全 来源:网络整理
导读:我在我的xpage应用程序中遇到了bootstrap dateTimePicker控件的问题,我怀疑这与xPages生成控件ID的方式有关. 以下代码在inputText元素上没有id时工作正常. script type="text/javascript" src="/fPath/jquery-min.js"/scriptscript type="text/javascript" s
我在我的xpage应用程序中遇到了bootstrap dateTimePicker控件的问题,我怀疑这与xPages生成控件ID的方式有关.

以下代码在inputText元素上没有id时工作正常.

<script type="text/javascript" src="/fPath/jquery-min.js"></script>
<script type="text/javascript" src="/fPath/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/RfPath/bootstrap-datetimepicker-3.0.0/js/moment.min.js"></script>
<script type="text/javascript" src="/fPath/bootstrap-datetimepicker-3.0.0/js/bootstrap-datetimepicker.min.js"></script>

<div class='input-group date' data-datetimepicker="true">
    <xp:inputText styleClass="form-control timePicker">
        <xp:this.converter>
            <xp:convertDateTime type="time" timeStyle="short" />
        </xp:this.converter>
    </xp:inputText>
    <span class="input-group-addon">
        <span class="glyphicon glyphicon-time"></span>
    </span>
</div>

一旦我添加了一个id,我在单击远离/退出控件时收到以下错误:

错误:语法错误,无法识别的表达式:unsupported pseudo:_id1

id是需要将数据映射回文档但我实际上并没有使用它来附加datetimepicker – 我正在使用一个类:

$('.timePicker').each(function(i,el){SHARED.timePickerOpen(el)}) 

SHARED = {
    timePickerOpen: function(el){
        $(el).datetimepicker({
            pickDate: false,pickTime: true,useCurrent: true,minuteStepping:5  
        });
    }
}

更新#1:

听起来有点误会,所以我会试着进一步解释……

>在测试中,我用纯HTML编写代码,为字段提供ID和
它工作正常.
>如果我使用xpage字段(domino生成ID
使用冒号)日期选择器失败并出现上述错误.
>我不使用ID将事件绑定到字段,我使用类get
然后该字段将datetimepicker控件绑定到它.

问题似乎是使用字段ID的datetimepicker.即使我通过类名(不是id)获取字段,datetimepicker代码似乎想要在字段中找到一个id. datetimepicker绑定到该字段没有任何问题.当您尝试选择模型框显示的时间并允许您选择时间时,当您尝试单击该字段以关闭模型时间控件时会发生错误.

解决方法

有趣的插件.我创建了一个示例页面,看看我是否可以将它与XPage集成,如果我得到相同的错误.在完成我在下面描述的内容之后,我让它在没有您报告的问题的情况下运行.

如文档中所述,我已将插件和moment.js添加到数据库中,并使用示例代码here构建一个简单的演示页面.在数据库中我使用的是Bootstrap4XPages插件(March发行版),因此已经加载了Bootstrap 3.1.1.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
  xmlns:xp="http://www.ibm.com/xsp/core"
  xmlns:xc="http://www.ibm.com/xsp/custom">

<xp:this.resources>
    <xp:script
        src="momentjs-2.7.0/moment.min.js"
        clientSide="true">
    </xp:script>
    <xp:script
        src="eonasdan-datetimepicker/js/bootstrap-datetimepicker.min.js"
        clientSide="true">
    </xp:script>
    <xp:styleSheet
        href="eonasdan-datetimepicker/css/bootstrap-datetimepicker.min.css"></xp:styleSheet>
</xp:this.resources>

<xp:div
    xp:key="facetMiddle">

    <p>
        This page uses&#160;
        <a
            href="https://github.com/Eonasdan/bootstrap-datetimepicker">Eonasdan's Bootstrap DateTimePicker</a>
        .
    </p>

    <div
        class="col-sm-6">
        <div
            class="form-group">
            <div
                class='input-group date'
                id='datetimepicker1'>

                <xp:inputText
                    id="inputText1"
                    styleClass="form-control">
                    <xp:this.converter>
                        <xp:convertDateTime
                            type="both"
                            timeStyle="short" />
                    </xp:this.converter>
                </xp:inputText>
                <span
                    class="input-group-addon">
                    <span
                        class="glyphicon glyphicon-calendar"></span>
                </span>
            </div>
        </div>
    </div>

</xp:div>

<xp:scriptBlock
    id="scriptBlock1">

    <xp:this.value><![CDATA[$(function () {
    $('#datetimepicker1').datetimepicker();
    });]]></xp:this.value>
</xp:scriptBlock>

</xp:view>

首次打开XPage在Chrome控制台中给出了一个熟悉的错误:

Uncaught TypeError: undefined is not a function

我之前见过一个:较新的jQuery插件尝试使用它的AMD加载器,但这与XPage中的Dojo实现不相符.我知道有两种解决方法:

>使用Sven Hasselbach’s method在Dojo之前加载(JavaScript)资源.
>更改您正在使用的库的源代码.这种方法也不完美,但我喜欢的方法.在JavaScript文件中(在本例中名为bootstrap-datetimepicker.js),您需要找到确定它是否可以使用AMD加载程序的行.它们通常可以在JavaScript文件的开头或结尾找到.

这是你在bootstrap-datetimepicker.js中寻找的代码:

; (function (factory) {
if (typeof define === 'function' && define.amd) {
    // AMD is used - Register as an anonymous module.
    define(['jquery','moment'],factory);
} else {
    // AMD is not used - Attempt to fetch dependencies from scope.
    if (!jQuery) {
        throw 'bootstrap-datetimepicker requires jQuery to be loaded first';
    } else if (!moment) {
        throw 'bootstrap-datetimepicker requires moment.js to be loaded first';
    } else {
        factory(jQuery,moment);
    }
}
}

然后我们禁用(或删除;您的选择)AMD部分:

; (function (factory) {
//if (typeof define === 'function' && define.amd) {
    // AMD is used - Register as an anonymous module.
//    define(['jquery',factory);
//} else {
    // AMD is not used - Attempt to fetch dependencies from scope.
    if (!jQuery) {
        throw 'bootstrap-datetimepicker requires jQuery to be loaded first';
    } else if (!moment) {
        throw 'bootstrap-datetimepicker requires moment.js to be loaded first';
    } else {
        factory(jQuery,moment);
    }
//}
}

现场演示可以在here找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读