2013-04-30 132 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类访问类名通,使类名称在整个错位应用程序。

相关问题