如何为SmartGWT Widget设置自定义属性

时间:2016-12-10 02:25:37

标签: dom gwt smartgwt

我想获得smartgwt小部件的属性,我将其设置为GWT中的方式。 例如在GWT中:

//Button creation
 Button btn1 = new Button(" Button 1");
 Button btn2 = new Button("Button 2");
 Button btn3 = new Button("Button 3");

//setting the attribute to button doms
 btn1.getElement().setAttribute("data-tracking", "Button 1 clicked");
 btn2.getElement().setAttribute("data-tracking", "Button 2 clicked");
 btn3.getElement().setAttribute("data-tracking", "Button 3 clicked");

    //Global handler to catch all the event in my application
        Event.addNativePreviewHandler(new NativePreviewHandler() {
              public void onPreviewNativeEvent(final NativePreviewEvent event) {
                final int eventType = event.getTypeInt();
                switch (eventType) {

                  case Event.ONCLICK:
                     System.out.println("on clikc clicked"+Element.as(event.getNativeEvent().getEventTarget()).getAttribute("data-tracking"));
//getting the button attribute 
                     if(Element.as(event.getNativeEvent().getEventTarget()).getAttribute("data-tracking")!=null && !Element.as(event.getNativeEvent().getEventTarget()).getAttribute("data-tracking").equals("")){
                     googleAnalyticsTrackPageView(Element.as(event.getNativeEvent().getEventTarget()).getAttribute("data-tracking"));
                     }
                    break;

                }
              }
            });

但是在SmartGWT中,我无法设置/获取此属性。有没有办法解决这个问题? 我们要求将谷歌分析添加到我们的应用程序,但我们面临的问题是无法设置属性。 想要在小部件中添加一些自定义属性,例如(单击选项卡/点击应用程序内的一些帮助图标,很多地方)

Img helpButtonImage = new Img(HELP_ICON);
helpButtonImage.getElement().setAttribute("data-tracking", "help on purchase order");

ButtonItem loginButtonItem = new ButtonItem();
loginButtonItem.setAttribute("data-tracking", "User clicked on login button");

并且需要像上面提到的那样在全局处理程序中捕获。

1 个答案:

答案 0 :(得分:0)

来自getElement文档

  

SmartGWT的正常用法是在SmartGWT小部件上调用draw(),而不是使用RootPanel.add()。开发人员通常不需要为SmartGWT画布实例调用getElement()或setElement()。如果开发人员确实需要访问由绘制的SmartGWT组件创建的DOM元素,则应使用com.smartgwt.client.widgets.Canvas.getOuterElement()和com.smartgwt.client.widgets.Canvas.getContentElement()。有关更多信息,请参阅javadoc以获取这些方法。请特别注意,不应在DOM中直接操作这些元素 - 而应使用标准的SmartGWT API,如draw(),clear(),setContents(),addChild(),redraw()。另请参见com.smartgwt.client.widgets.Canvas.setHtmlElement(Element),了解如何将SmartGWT组件嵌入到现有DOM元素中。   getElement()和setEleent()仅用于支持将SmartGWT小部件添加到核心GWT布局管理器。此用法有限制和警告 - 请参阅此常见问题列表。   getElement()用于与核心GWT集成的机制与com.smartgwt.client.widgets.Canvas.setHTMLElement(Element)所描述的机制相同,并具有相同的警告

所以,一个例子。

IButton button = new IButton("Hello World");
button.setWidth( 400 );
RootPanel.get().add(button);

结果如下: enter image description here

如果您尝试这样做:

IButton button = new IButton("Hello World");
button.setWidth( 400 );
RootPanel.get().add(button);
button.getContentElement().setAttribute( "style" , "color: white;" );

结果是: enter image description here

请注意,IButton来自com.smartgwt.client.widgets.IButton

问候!