2012-02-04 51 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); 
     } 

我不知道这是否是更好的方式来做到这一点,但它的工作原理。

相关问题