【问题标题】:How to set start time for primefaces clock widget?如何设置primefaces时钟小部件的开始时间?
【发布时间】:2015-04-30 16:12:14
【问题描述】:

是否可以为 PrimeFaces 时钟小部件设置开始时间? 我知道 PrimeFaces Extensions 的模拟时钟,但我需要带有此选项的数字时钟。 我试图覆盖这个时钟的 javascript 方法,但它不起作用。

  PrimeFaces.widget.Clock = PrimeFaces.widget.BaseWidget.extend({

    init: function(cfg) {
        this._super(cfg);

        this.cfg.value = 1430304817141;
        this.current = this.isClient() ? new Date() : new Date(this.cfg.value);
        var $this = this;

    },

    isClient: function() {
        return this.cfg.mode === 'client';
    },

});

【问题讨论】:

  • 不工作怎么办?您在哪里尝试覆盖脚本以及如何覆盖?
  • 我已尝试在 $(document).ready 函数中覆盖此方法 - 未调用 init 方法。
  • 发布您的覆盖代码。
  • 上面发布的代码。 this.cfg.value 是默认时间,这里这个值被覆盖 this.cfg.value = 1430304817141; 然后尝试在这里设置这个值 this.current = this.isClient() ? new Date() : new Date(this.cfg.value);
  • 所以你不是在覆盖一个方法,你是在覆盖一个小部件?在$(document).ready 中,它可能会在 PrimeFaces 创建小部件之后覆盖。尝试在 h:head 中覆盖而不等待 ready 事件。

标签: jsf-2 primefaces clock


【解决方案1】:

第一个问题是在 PrimeFaces 实例化其原始未修改的小部件之后,您覆盖小部件为时已晚。根据PrimeFaces Customizable Resource Ordering,覆盖的正确位置是h:head
第二个问题是您使用残缺版本覆盖小部件,该版本不包含原始小部件中存在的许多必要功能。

我根本不推荐这种方法 - 基本上像那样破坏整个 PrimeFaces 小部件。如果您想使用正常未更改的时钟怎么办?复制粘贴的代码也更难维护。我建议采用更本地化的方法:只调整一个小部件实例。

<p:clock id="my_clock" />
<script>
    // get widgetVar via EL function, since p:clock doesn't have the widgetVar attribute
    var myClockVar = #{p:widgetVar('my_clock')};
    myClockVar.current = new Date(1430304817141);
</script>

请注意不要使用 AJAX 请求更新时钟,否则它将重置为显示客户端时间;并且不要更新脚本,否则时钟将再次重置为指定时间。

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多