GWT: как я могу добавить / удалить кнопку в планшете на ходу - PullRequest
2 голосов
/ 04 февраля 2012

У меня есть эта ячейка кнопки в моем CellTable

ButtonCell reListCell = new ButtonCell();
reListColumn = new Column<EmployerJobs, String>(reListCell) {
  @Override
  public String getValue(EmployerJobs object) {
    return "ReList";
  }
};

ctJobs.addColumn(reListColumn, 
    EmployerDashBoardConstants.EMPTYHEADERCOLUMN);

, но я хочу, чтобы эта ячейка появлялась только при условии выполнения условия ниже

public void getDateDiff(final EmployerJobs object) {
  rpcService.getDateDiff(object.getJobValidDate(), new AsyncCallback<Boolean>() {
    public void onFailure(Throwable caught) {
    }

    public void onSuccess(Boolean jobExpired) {
      if(jobExpired) {
        // HERE I WANT TO SHOW MY RELISTCELL, means if the job is expired only then 
        // there will be a button showing relist would be appear in that row ,for 
        // the jobs which are not expired NO button should appear..  
      }
    }
  });
}

как мне этого добиться?

спасибо

Ответы [ 3 ]

4 голосов
/ 04 февраля 2012

Я согласен с DTing.
Запрос серверной части для каждой ячейки / строки не очень эффективен.Я бы предпочел поместить информацию ( jobExpired ) в ваш класс EmployerJobs и передать информацию, когда вы запросите список ваших EmployerJobs для отображения в вашем CellTable.
. Вы можете обновитьсписок периодически для учета изменений (см. образец расходы о том, как это сделать).

Но на ваш первоначальный вопрос (скрытие клетки).Существует два решения:

  • Используйте ActionCell и переопределите метод рендеринга.

ActionCell:

ActionCell<EmployerJobs> reListCell = new ActionCell<EmployerJobs>("ReList",
    new ActionCell.Delegate<EmployerJobs>() {
        @Override
        public void execute(EmployerJobs object) {
           // code to be executed 
        }
     }) 
 {
     @Override
     public void render(Cell.Context context,EmployerJobs value,SafeHtmlBuilder sb) {
         if (value.isJobExpired())   // isJobExpired returns the field jobExpired.
             super.render(context,value,sb);
         }
 };

 reListColumn = new Column<EmployerJobs, EmployerJobs>(reListCell) {
      @Override
      public String getValue(EmployerJobs object) {
        return object;
      }
 };

 ctJobs.addColumn(reListColumn, 
    EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
  • Используйте ButtonCell и переопределите метод рендеринга вашего столбца.

ButtonCell:

ButtonCell reListCell = new ButtonCell();
reListColumn = new Column<EmployerJobs, String>(reListCell) {
  @Override
  public String getValue(EmployerJobs object) {
    return "ReList";
  }
  @Override
  public void render(Cell.Context context,EmployerJobs object,SafeHtmlBuilder sb) {
     if (value.isJobExpired())   // isJobExpired returns the field jobExpired.
        super.render(context,value,sb);
  }
};

ctJobs.addColumn(reListColumn, 
    EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
1 голос
/ 23 мая 2013

Я тоже попробовал решение ButtonCell. Но если вы щелкнете в ячейке, которая не имеет кнопки, то произойдет ошибка на стороне клиента:

com.google.gwt.core.client.JavaScriptException: (TypeError) @ com.google.gwt.core.client.impl.Impl :: apply (Ljava / lang / Object; Ljava / lang / Object; Ljava / lang / Object;) ([объект JavaScript (445), объект JavaScript (240), объект JavaScript (637)]): родительский объект равен нулю

Поэтому я добавил это, чтобы переопределить событие и избежать события, если я хочу:

        @Override
        public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context,
                Element parent, YourObject object, NativeEvent event) {
            if (object.isCompleted())  
                super.onBrowserEvent( context, parent,  object,  event);
        }

Я не знаю, лучше ли это сделать, но это работает.

1 голос
/ 08 февраля 2013

Только что попробовал Umit solution # 2 ButtonCell. Это работает!

Чтобы связать определенное действие с кнопкой, reListColumn.setFieldUpdater (new FieldUpdater .... будет необходимо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...