【问题标题】:Hide all primefaces blockui elements隐藏所有 primefaces blockui 元素
【发布时间】:2015-05-14 17:05:39
【问题描述】:

我有很多 .xhtml 视图。其中很多都有blockui元素,例如:

    <p:blockUI block="tab" widgetVar="subscriberSelectBlocker">
    </p:blockUI>

有时每个视图有超过 1 个。 为了隐藏上面的blockUI,我在相应的bean SubscriberFilterBean.java 中有一个方法:

public void hideSubscriberSelectBlockUi() {
    RequestContext.getCurrentInstance().execute("subscriberSelectBlocker.hide()");
}

现在的问题是我需要一次隐藏所有现有的块。 我可以像上面那样单独隐藏它们,但这意味着我基本上会重复 15 次以上相同的代码,并且执行所有这些方法的方法会很庞大。

有没有办法隐藏标签的所有元素? 类似的东西

public void hideSubscriberSelectBlockUi() {
    RequestContext.getCurrentInstance().execute("p:blockui.hide()");
}

【问题讨论】:

    标签: jsf jsf-2 primefaces blockui


    【解决方案1】:

    当您在 PrimeFaces 元素中指定 widgetVar 时,JavaScript 小部件对象将被实例化并分配给窗口范围内具有指定名称的全局变量。这意味着可以找到和操作这些对象。

    我建议通过 blockui id 找到它们。 Widget 对象包含它的 id,所以在从页面中获取所有全局对象和所有 blockui id 后,我们可以确定哪些全局对象是 blockui 小部件。页面中的 Blockui id 可以使用 jQuery 类选择器获取,因为它们都有共同的 css 样式:.ui-blockui

    这是显示页面上所有 blockui 组件的 JavaScript 示例代码:

    var keys = Object.getOwnPropertyNames( window );
    var blocks = $('.ui-blockui');
    var blockIds = [];
    blocks.each (function (index,value) {
        blockIds[index] = value.id;
    });
    $.each(keys, function (index, value) {
        var obj = window[ value ];
        if (obj != null) {
            gObj = window[ value ];
            if(gObj.blocker != undefined) {
                if ($.inArray(gObj.blocker.attr('id'), blockIds) != -1) {
                    gObj.show();
                }
            }
         }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2012-05-14
      • 2014-03-08
      相关资源
      最近更新 更多