我有很多.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()");
}
答案 0 :(得分:1)
当您在PrimeFaces元素中指定widgetVar时,将实例化JavaScript小部件对象并将其分配给窗口范围中具有指定名称的全局变量。这意味着可以找到并操纵这些对象。
我建议通过blockui id找到它们。 Widget对象包含它的id,因此在从页面获取所有全局对象和所有blockui id之后,我们可以确定哪些全局对象是blockui小部件。可以使用jQuery类选择器获取页面中的Blockui ID,因为它们都具有通用的css样式:.ui-blockui
。
以下是JavaScript示例代码,其中显示了页面上的所有blockui组件:
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();
}
}
}
});