【问题标题】:ZK Disbale Div,Window,Layout Component?ZK 禁用 Div、Window、Layout 组件?
【发布时间】:2013-05-16 08:58:40
【问题描述】:

我在我的项目中使用 ZK 框架 我在 div 或 Window 组件中有很多其他组件,谁能告诉我如何禁用 DivWindow 组件某些条件。我检查过这些组件没有任何disable 属性。

我们可以通过任何其他方式disableDivWindow 否则我必须禁用DivWindowLayout 中的每个组件

【问题讨论】:

  • 禁用 div 组件是什么意思?
  • 我的意思是说组件将在页面中可见,但您不能修改该 div 或窗口上的任何内容,例如 datalist ,按钮具有禁用属性

标签: zk


【解决方案1】:

这是禁用所有实现
Disable 接口的组件的非常简单的方法。

@Wire("disable")
private List<Disable> allToDisable;

private disableAll(List<Disable> list){
   for(Disable d : list){
       d.setDisabled(true);
   }
}

您可以编辑@Wire 的路径以满足您的需要,
使用Selectors 的方法或任何其他方法
这需要一个 zk 选择器路径。让它以
"disable" 结尾,所以它应该选择每个
实现接口。

【讨论】:

  • 你必须知道你的框架 :-D 而且阅读要好得多;-)
  • 我们必须从哪个组件写入禁用?当我们调用 disableall 方法时
  • 示例:@Wire("#win &gt; disable") 应该返回实现DisableComponent 的ID 为win 的所有子代。而且你必须在你想禁用组件的时候调用disableAll
【解决方案2】:

我认为没有简单的方法,我会尝试这样的事情(在谷歌上找到了这个,但我记得在我的上一个项目中做了类似的事情)

public static void disableComponents( AbstractComponent pComponent ) {

  for( Object o : pComponent.getChildren() ) {

     AbstractComponent ac = ( AbstractComponent ) o;

     try {
        Method m = ac.getClass().getMethod( "setDisabled", Boolean.TYPE );
        m.invoke( ac, true );
     } catch( Exception e ) {
     }

     List children = ac.getChildren();
     if( children != null ) {
        disableComponents( ac );
     }
  }

}

【讨论】:

  • 嗯,这意味着我必须创建一个扩展 Div 或 Window 的新组件,我们将为此创建一个新属性来调用此方法
  • 你能举一个你在项目中使用的完整例子吗?
  • 不,您只需使用您的 DIV(或窗口或其他)组件作为参数调用此方法,它将获取其子组件并尝试在每个子组件上调用 setDisabled,因为某些组件存在 catch 块(如 DIV)会发出 NoSuchMethodException - 显然你不能禁用 div,这没有任何意义。
  • 我必须禁用 div 或 window 内的所有组件
  • 我只是不明白为什么要禁用某些无法禁用的组件... div 只是一个容器,它没有可以禁用的活动行为。您可以禁用输入,textareas atc。在您的 DIV 或窗口中,但为什么要禁用例如标签组件?如果您想隐藏它们,那将是有意义的,但这是没有意义的。
【解决方案3】:

我们可以改进 Gatekeeper(2013 年 5 月 16 日 9:22)的解决方案,添加条件“如果”。 if (ac instanceof Disable) { --- 代码 -- }

public static void disableComponents( AbstractComponent pComponent ) {
    for( Object o : pComponent.getChildren() ) {
        AbstractComponent ac = ( AbstractComponent ) o;
        try {
            if (ac instanceof Disable) {
                Method m = ac.getClass().getMethod("setDisabled", Boolean.TYPE);
                m.invoke(ac, true);
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }

        List children = ac.getChildren();
        if( children != null ) {
            disableComponents( ac );
        }
    }
}

【讨论】:

猜你喜欢
  • 2011-03-02
  • 2020-07-17
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
相关资源
最近更新 更多