网格首次附加后为网格单元添加(悬停)侦听器

时间:2014-12-18 16:27:36

标签: java gwt gridview grid gxt

我有类似的东西。

Grid<Stock> mygrid = new Grid<Stock>(store, cm)
{
    @Override
    protected void onAfterFirstAttach() 
    {       
        super.onAfterFirstAttach();
        //here do the binding for the cell elements that have myclass
    }
};

对于mygrid的观点,我有这个

view.setViewConfig(new GridViewConfig<Stock>()
{
    @Override
    public String getRowStyle(Stock model, int rowIndex)
    {
        return "";
    }

    @Override
    public String getColStyle(Stock model, ValueProvider<? super Stock, ?> valueProvider, int rowIndex, int colIndex)
    {       
        String style = "";
        if(SOME_CASE)
        {
            style = "myclass"; 
        }

        return style;
    }
});

我想要做的是onAfterFirstAttach我想添加一些监听器/处理程序,在hover期间会做一些事情,让我们说为了简单起见,给出一个alert

我正在尝试做什么?我可以在不使用JSNI或像gwtquery这样的库的情况下完成我想要的工作吗?是否确保onAfterFirstAttach应该拥有类myclass的所有单元格都可用且可访问?如果是,我如何附加我想要的监听器/处理程序?

问题似乎很多,但我相信它们都是相互关联的。

我正在使用GWT 2.6和GXT 3.1。

更新

我忘了提到一个可行的解决方案是在整个网格上添加一个listener for the mouse move,然后获取每个单元格并检查它是否具有所需的类,但这似乎有点过分。必须有一个更简单的方法。

1 个答案:

答案 0 :(得分:1)

浏览器会触发本机事件(单击,聚焦,模糊等),无论您是否需要它们。这些事件“冒泡”了DOM树,让您有机会在适当的级别“倾听”它们。

在您的示例中,您可以在单元格级别创建30个侦听器,等待“他们的”单元格中发生的事情。这是一个繁重的(30个对象)和缓慢的(构建和绑定所有这些)需要时间的解决方案。或者,您可以在网格级别创建一个侦听器,该侦听器侦听从单元格冒出的所有事件,并决定是否需要执行某些操作或应忽略事件。单个侦听器更轻,可以更快地创建。另一方面,它需要检查事件,尽管它通常是快速有效的操作(例如,检查事件源具有特定的类名)。另请注意,当浏览器通常无需执行任何操作时,此操作需要一些时间,因此仅检查事件以忽略它们不会影响用户体验。

根据我的经验,单个监听器几乎总是一个更好的解决方案,尽管现代浏览器和计算机速度很快,差异很小。