2013-04-30 84 views
0

我有GWT CellList和通過DataProvider添加項目後,我使用下面的代碼添加樣式到每個項目。GWT CellList ...當項目點擊時,先前點擊的項目失去其風格

members... we can styling if a matched item is also in members 
matched... passed in as a MetaJsArray<Contact> 

CellList<Contact> list = getView().getResults(); 
for (int i=0; i<matched.length(); i++) { 
    if (members.isExistingEntry(matched.get(i))) { 
     list.getRowElement(i).addClassName("RED"); 
    } 
} 

此代碼的工作,直到......我單擊列表中的項目。

onCellPreview()針對每個被點擊的物品被調用,但是之前點擊的物品失去了它的「紅色」樣式。

我是否需要添加不同樣式?或者我該如何阻止「紅」的損失?

回答

0

我的猜測是GWT生成javascript的方式。當你手動設置單元格加載它的所有好處。當您選擇它時,javascript會將對象更改爲使用選定的CSS,並且當您選擇它時,CSS會更改爲單元格的默認GWT CSS樣式。

我能想到的唯一方法是在select上有一個處理程序。當您選擇一個項目時:

selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 
       public void onSelectionChange(SelectionChangeEvent event) { 
        // get item last selected 
        // check if needs re styling 
        // restyle 
        // do things with the new selected object 
       } 
       }); 

添加另一個檢查單元格列表並標記沒有標記的單元格。 這種方式可能效率低下,但它是避免我可以想到的問題的一種方式。希望能幫助到你。

0

在嘗試了各種方法後,唯一需要的就是在渲染時定義樣式。

使用我自己的ContactCell擴展AbstractCell,render()函數可以將樣式值傳入contactcell.ui.xml文件。

@Override 
public void render(Context context, Contact value, SafeHtmlBuilder sb) { 
    if (value == null) { 
     return; 
    } 

    String styling = value.getStyling(); 
    uiRenderer.render(sb, styling); 
} 

,然後在contactcell.ui.xml文件

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'> 
    <ui:with field='styling' type='java.lang.String'/> 

    <div class="{styling}"> ... </div> 

GWT將裂傷的樣式名稱,這樣定義自己的CssResource類訪問類名通,使類名稱在整個錯位應用程序。