EventToolTable ішіндегі AbstractCell ішіндегі «нұқу» үшін ата-аналық виджеттегі оқиғаларды өңдеу

Мен GWT-нобтың біраз бөлігі болып тұрмын және мен осы бағытта дұрыс бағытты бағалаймын.

GWT 2.4 пайдалану

CellTable-ті қосатын EntryPoint сыныпта оқиғаны қалай тыңдауға болатындығын білмеймін. CellTable жүйесінде еренсілтеме бар Жолды көрсететін AbstractCell қолданбасы бар. Ұяшық нұқу оқиғасын өңдейді.

EntryPoint сыныбында оқиғаны қандай да бір әрекетке (мысалы, CellTable жасыру және басқа да виджеттерді көрсету) қабылдау үшін қалай өңдеуге болады?

Мен Ұяшық пен CellTable-тегі оқиғамен сәтті жұмыс істей аламын, бірақ ата-ана виджетін қалай алуға болатындығын біле алмайсыз (EntryPoint сыныбы оны өңдеу үшін).

EntryPoint сыныбы:

public class Tags_GWT implements EntryPoint {

private final TagGwtServiceAsync tagService = GWT.create(TagGwtService.class);
final TagCellTable tagCellTable = new TagCellTable();

public void onModuleLoad() {

    RootPanel.get("tagCellTable").add(tagCellTable);

   //load the table with data
    tagService.getTagsAsList(new AsyncCallback>() {
        public void onFailure(Throwable caught) {
            GWT.log("Error loading data");
        }
        public void onSuccess(List tags) {
            tagCellTable.setInput(tags);
        }
    });

CellTable класы:

public class TagCellTable extends CellTable{

code removed for simplicity

// Add a field updater to be notified when the user enters a new name.
nameColumn.setFieldUpdater(new FieldUpdater() {
  @Override
  public void update(int index, TagDto object, String value) {
   //Inform the user of the change.
    Window.alert("TagCellTable.update is executing for: '" + value + "'");
  }
});

AbstractCell класы:

public class LinkCell extends AbstractCell{

code omitted for simplicity

@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater valueUpdater) {

  super.onBrowserEvent(context, parent, value, event, valueUpdater);

  if ("click".equals(event.getType())) {
   //Ignore clicks that occur outside of the outermost element.
    EventTarget eventTarget = event.getEventTarget();
    if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
      doAction(value, valueUpdater);
    }
  }
}


@Override
protected void onEnterKeyDown(Context context, Element parent, String value, NativeEvent event, ValueUpdater valueUpdater) {
  doAction(value, valueUpdater);
}


private void doAction(String value, ValueUpdater valueUpdater) {

  Window.alert("LinkCell.doAction is executing for: ' " + value + "'");

  if (valueUpdater != null) {
      valueUpdater.update(value);
  }
}
1

1 жауаптар

EventBus нысанына LinkCell сілтемесін беруіңіз керек деп ойлаймын. Содан кейін, doAction ішінде EventBus ішіндегі Оқиға атауын шығаруға болады. Сіздің кіріспе модуліңіз тиісті оқиғалар үшін бірдей EventBus тілінде тыңдауға және сол жерден жауап беруге болады.

CellTable виджеттерден жасалмағандықтан, ұяшыққа ішкі кодтан кірістірудің жақсы жолы жоқ. Кәдімгі виджет оқиғасының иерархиясы ешқашан белсендірілмейді, сондықтан тыңдаушыны қосуға ештеңе жоқ - өзіңіздің EventBus құруға тура келеді.

1
қосылды
Иә! Неғұрлым нақты қоңырау объектісін пайдалануға болады.
қосылды автор Riley Lark, көзі
Бұл үшін қосымшаның жаһандық оқиғалық автобусын пайдалануды ұсынбаймын, бірақ - сіздің Ұяшыңызға тек Cell үшін ғана ерекше оқиға автобусын бере аласыз, содан кейін басқа виджеттер бұл оқиға автобусында тыңдай алады.
қосылды автор Riley Lark, көзі
Жауапыңызға рахмет. SimpleEventBus пайдалану әдісін түсіндіретін осы постты таптым. Мен бұл ұсыныс деп ойлаймын?
қосылды автор Justin, көзі