Java 如何在GWT UiBinder中向HTML元素动态添加类?

Java 如何在GWT UiBinder中向HTML元素动态添加类?,java,css,gwt,uibinder,Java,Css,Gwt,Uibinder,像jQuery这样的JavaScript库能够动态地向DOM元素添加/删除类,如下所示: $("#some-element").addClass("make-me-pretty"); 这一点很重要,因为它允许您对这些元素动态应用不同的样式规则 在GWT land中,您可能会有如下UiBinder XML片段: <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder

像jQuery这样的JavaScript库能够动态地向DOM元素添加/删除类,如下所示:

$("#some-element").addClass("make-me-pretty");
这一点很重要,因为它允许您对这些元素动态应用不同的样式规则

在GWT land中,您可能会有如下UiBinder XML片段:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:gwt="urn:import:com.google.gwt.user.client.ui">
    <div>
        <span id="">Some content</span>

        <gwt:RadioButton ...>
            ...
        </gwt:RadioButton>

        <!-- etc. -->
    </div>
</ui:UiBinder>

一些内容
...
  • 对于非小部件元素,如
    ,如何在Java代码中动态添加/删除类
  • 说到
    ,我似乎找不到GWT对UiBinder XML的引用XSD,也找不到对
    com.google.GWT.
    XML的所有元素和属性的法律定义的某种正式引用。例如,在哪里可以找到子元素和属性
    gwt:RadioButton
    支持的文档?不仅仅是一个小部件,所有的小部件!有人能给我指出正确的方向吗

  • 提前谢谢

    您可以在gwt user-
    .jar中找到UiBinder.xsd(至少从2.4.0开始,但我也怀疑是旧版本)

    至于您的另一个问题:您总是可以使用

    yourUi.getElement().getElementsByTagName( "span" )
    
    然后找到具有匹配的
    id
    元素
    ,但这不是很优雅。我其实从来没有遇到过这种情况,;这是一个有趣的问题

    希望有帮助

    干杯,

    对于任何UIobject(包括RadioButton),您可以:

    在GWT中:styleName=class


    更多

    我想你可以这样做。 将您的“作为UI”字段映射到GWT“SpanElement”

    <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
      <div>
        Hello, <span ui:field='nameSpan'/>.
      </div>
    </ui:UiBinder>
    
    
    你好
    
    在绑定到上述ui.xml文件的类中,可以按如下方式更改该类

          interface MyUiBinder extends UiBinder<DivElement, HelloWorld> {}
          private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
    
          @UiField SpanElement nameSpan;
    
          public HelloWorld() {
            setElement(uiBinder.createAndBindUi(this));
          }
    
          public void changeClass(){
               nameSpan.setClassName("newClass");
          }   
    
    接口MyUiBinder扩展了UiBinder{} 私有静态MyUiBinder=GWT.create(MyUiBinder.class); @UiField-span元素名称span; 公共HelloWorld(){ setElement(uiBinder.createAndBindUi(this)); } 公共类(){ nameSpan.setClassName(“新类”); }
    我猜您有一个html页面,可以在其中加载小部件。 您可以在**.ui.xml文件中指定一个类,就像在html页面中一样

    <div class="MyClass" align="middle">
        <gwt:VerticalPanel>
                  .......
        </gwt:VerticalPanel>
    </div>
    

    加载视图时,main.css文件将“看到”类的名称并对其进行操作。

    谢谢@Anders Rostgaard Bystru(+1)-我马上就来看看这里。关于非小部件类的动态添加/删除有什么想法吗?再次感谢!虽然正确,但我相信orionTurtle询问了如何以编程方式更改活页夹中非@UiField元素的样式。
    <div class="MyClass" align="middle">
        <gwt:VerticalPanel>
                  .......
        </gwt:VerticalPanel>
    </div>
    
    .MyClass{background-color:black;}