2013-07-23 3 views
2

Я разрабатываю приложение GWT. Также я использую библиотеку Twitter Bootstrap и GWTQuery. Существует DropdownButton. Я хочу открыть его программно.Как я могу открыть программу Bootstrap Dropdown программно?

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 - добавить 'открытый' класс 'БТН-группы'. Но это невозможно программно. Я не знаю почему. Использование методов addClassName/addStyleName игнорируется.

Также я попытался имитировать событие клика через Document.get().createClickEvent, но выпадающее меню не handlerManager. Я попытался позвонить trigger и click с помощью JQuery/GWTQuery.

Можно ли программно открыть всплывающее окно?

ответ

0

Вы можете попробовать подклассов DropDownButton, добавляя поглотитель для кнопки запуска (в конце класса), как это:

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> 

И теперь вы можете позвонить, функцию щелчка на кнопке: dropDownButton.getButton().click();

Я не тестирую его, но он должен работать.

Надеюсь, это поможет. :)

Смежные вопросы