Стандартная библиотека URI предоставляет URI.regexp
, которое является регулярным выражением для строки URL.
require 'uri'
string.scan(URI.regexp)
Вот довольно подробный пример создания настраиваемого события, дословно взятый из GwtEventSystem Wiki (когда система событий все еще находилась в инкубаторе GWT).
Это так. событие, которое запускается, когда пользователь становится счастливым.
Определите новый класс событий. Вы можете добавить произвольные метаданные в класс события. Для простоты мы не будем включать сюда ни одного.
public class HappyEvent extends GwtEvent {
...
}
Определите новый обработчик и интерфейс маркера для класса событий.
interface HappyHandler extends EventHandler {
public void onHappiness(HappyEvent event);
}
interface HasHappyEvents {
public HandlerRegistration addHappyHandler(HappyHandler handler);
}
Добавьте уникальный тип события
class HappyEvent extends AbstractEvent{
public static AbstractEvent.Key KEY = new AbstractEvent.Key(){...}
public GwtEvent.Key getKey(){
return KEY;
}
...
}
Подключите метод fire обработчика
class HappyEvent extends GwtEvent {
static Key<HappyEvent,HappyHandler> KEY = new Key<HappyEvent,HappyHandler>(){
protected void fire(HappyHandler handler, HappyEvent event) {
handler.onHappiness(event);
};
...
}
Похоже, вам нужна поддержка PropertyChange *. Взгляните на gwtx . Погуглите "gwt PropertyChange", и вы получите несколько блогов, в которых объясняется, как его использовать.
Возможно, вы захотите взглянуть на ValueChangeHandler и ValueChangeEvent в GWT 1.6. Они могут сработать для того, что вы пытаетесь сделать.
Спасибо за все ответы. Закнесс подошел ближе всего к тому, чтобы дать мне нужный ответ, однако я придумал немного более простую модель.
Моей основной целью было избежать использования статической переменной в моей основной структуре данных. Я также столкнулся с проблемой, пытаясь выяснить, была ли эта основная структура данных успешно извлечена из базы данных во время попытки доступа к ней, и что делать, если это не так (т.е. когда она пуста).
После просмотра Google Web Toolkit Architecture: Best Practices For Architecting Your GWT App видео от Google IO, идея шины событий казалась идеальной.
I ' Я опубликую здесь свое решение на случай, если оно поможет кому-то еще.
Сначала создайте класс Handler. Обратите внимание на ссылку на класс Event:
public interface CategoryChangeHandler extends EventHandler {
void onCategoryChange(CategoryChangeEvent event);
}
Теперь перейдем к классу Event. Это доставило мне больше всего проблем:
public class CategoryChangeEvent extends GwtEvent<CategoryChangeHandler> {
private final List<Category> category;
public CategoryChangeEvent(List<Category> category) {
super();
this.category = category;
}
public static final Type<CategoryChangeHandler> TYPE = new Type<CategoryChangeHandler>();
@Override
protected void dispatch(CategoryChangeHandler handler) {
handler.onCategoryChange(this);
}
@Override
public com.google.gwt.event.shared.GwtEvent.Type<CategoryChangeHandler> getAssociatedType() {
return TYPE;
}
public List<Category> getCategories(){
return category;
}
}
Теперь я могу использовать эти классы Handler и Event так, когда перезагружается эта основная структура данных:
Этот код получил структуру данных и хочу уведомить всех, кто ее слушает. обновлено:
CategoryChangeEvent event = new CategoryChangeEvent(result);
eventBus.fireEvent(event);
Этот код является реализацией события
public class PopulateCategoryHandler implements CategoryChangeHandler {
@Override
public void onCategoryChange(CategoryChangeEvent event) {
tearDownCategories();
List<Category> categories = event.getCategories();
populateCategories(categories);
}
}
Вот пример этого в блоге Алекса Рида, включая ссылку на пример рабочего кода . Этот пример заполняет некоторые нечеткие части и, наряду с примером Ника, помогает прояснить начало работы с архитектурой шины событий в вашем приложении gwt.
Создание пользовательских событий GWT с помощью HandlerManger не должно быть настолько сложным, взгляните на пример GwtEventBus @ NingZhang.info это действительно интуитивно понятно. Использованы следующие ключевые классы:
Я думаю, что самый полный и подробный пример находится в этой статье
Она содержит также пример проекта, который показывает, как правильно использовать определение пользовательских событий и использовать класс GWT HandlerManager.