2012-02-04 29 views
2

我有這樣的鈕釦電池在我CellTableGWT:我怎樣才能添加/刪除在上一個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.. 
     } 
    } 
    }); 
} 

我該如何做到這一點?

謝謝

+1

似乎相當過分,以調用您的表上的每一行服務器來檢查日期是否有效。可能應該檢查客戶端,並且如果按下按鈕,請在服務器上進行驗證。 – DTing 2012-02-04 06:02:07

回答

4

我同意DTing。
爲每個單元格/行查詢後端並不是非常有效。 我寧願將信息(jobexpired)放入您的EmployerJobs課程,並在您要求將EmployerJobs的列表顯示在您的CellTable中時傳輸信息。
您可以定期更新列表以應對更改(請參閱expenses示例瞭解如何操作)。

但你最初的問題(隱藏細胞)。有兩種解決方案:

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 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

剛試過烏米特解決方案#2扣式。有用!

爲了一個具體的行動鏈接到該按鈕,reListColumn.setFieldUpdater(新FieldUpdater .... 將需要

1

我試圖解決扣式過。但是,如果你在單元格中單擊誰,因爲沒有按鈕,然後在在客戶端錯誤發生:

com.google.gwt.core.client.JavaScriptException:(類型錯誤)@ com.google.gwt.core.client.impl.Impl ::申請(Ljava /郎/對象; Ljava/lang/Object; Ljava/lang/Object;)([JavaScript object(445),JavaScript object(240),JavaScript object(637)]):parent is null

所以我加入這個覆蓋事件,避免事件,如果我想:

 @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); 
     } 

我不知道這是否是更好的方式來做到這一點,但它的工作原理。

相關問題