2

我开发 GWT 应用程序。我还使用 Twitter Bootstrap 库和 GWTQuery。有DropdownButton。我想以编程方式打开它。

ui.xml 像这样:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:b="urn:import:com.github.gwtbootstrap.client.ui"
             xmlns:g='urn:import:com.google.gwt.user.client.ui'
...
<b:DropdownButton text="Test" ui:field="dropdownButton">
   <g:FlowPanel ui:field="contentPanel"/>
</b:DropdownButton>

我可以通过 Google Chrome 的检查器打开它 - 将“open”类添加到“btn-group”。但以编程方式是不可能的。我不知道为什么。addClassName/addStyleName方法的用法被忽略。

我也尝试通过 模拟点击事件Document.get().createClickEvent,但下拉菜单没有handlerManager。我试图在JQuery/GWTQuerytriggerclick帮助下打电话。

是否可以以编程方式打开下拉菜单?

4

1 回答 1

0

您可以尝试继承 DropDownButton,为触发按钮添加一个 getter(在类的末尾),如下所示:

 public class CustomDropdownButton extends DropdownBase {

private Button trigger;

/**
 * Creates a DropdownButton without a caption.
 */
public CustomDropdownButton() {
    super("div");
    addStyleName("btn-group");
}

/**
 * Creates a DropdownButton with the given caption.
 * 
 * @param caption
 *            the button's caption
 */
public CustomDropdownButton(String caption) {
    this();
    setText(caption);
}

/**
 * {@inheritDoc}
 */
@Override
protected IconAnchor createTrigger() {
    trigger = new Button();
    trigger.setCaret(true);
    return trigger;
}

/**
 * Sets the button's size.
 * 
 * @param size
 *            the button's size
 */
public void setSize(ButtonSize size) {
    trigger.setSize(size);
}

/**
 * Sets the button's type.
 * 
 * @param type
 *            the button's type
 */
public void setType(ButtonType type) {
    trigger.setType(type);
}

/**
 * Sets the button's icon.
 * 
 * @param type
 *            the icon's type
 */
@Override
public void setIcon(IconType type) {
    setBaseIcon(type);
}

/**
 * {@inheritDoc}
 */
@Override
public void setBaseIcon(BaseIconType type) {
    trigger.setBaseIcon(type);
}

@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
    return trigger.addClickHandler(handler);
}

/**
 * {@inheritDoc}
 */
@Override
public void setIconSize(IconSize size) {
    trigger.setIconSize(size);
}

/**
 * {@inheritDoc}
 */
@Override
public void setCustomIconStyle(String customIconStyle) {
    trigger.setCustomIconStyle(customIconStyle);
}

/**
 * {@inheritDoc}
 */
@Override
public void setIconPosition(IconPosition position) {
    trigger.setIconPosition(position);
}

public Button getButton(){
    return trigger;
}

}

现在您将拥有 uiBinder xml :

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:b="urn:import:com.github.gwtbootstrap.client.ui"
             xmlns:g='urn:import:com.google.gwt.user.client.ui'
             xmlns:c='urn:import:com.example.packageWithCustomDropDown'
...
<c:CustomDropdownButton text="Test" ui:field="dropdownButton">
   <g:FlowPanel ui:field="contentPanel"/>
</b:CustomDropdownButton>

现在您可以在按钮上调用 click 函数:dropDownButton.getButton().click();

我没有测试它,但它应该可以工作。

希望能帮助到你。:)

于 2014-02-28T11:36:34.103 回答