带ButtonCell的GXT 3.x RowExpander

时间:2013-10-29 10:57:41

标签: gwt gxt

我尝试将按钮添加到rowExpander内容中: 所以我有:

ButtonCell<Integer> viewButtonCell = new ButtonCell<Integer>();

和行扩展器

RowExpander<XX> expander = new RowExpander<XX>(identity, new AbstractCell<XX>() {
        @Override
        public void render(Context context, XX value, SafeHtmlBuilder sb) {
            sb.appendHtmlConstant("<span>");
            viewButtonCell.render(context, value.getId(), sb);
            sb.appendHtmlConstant("</span>");
        }

ButtonCell呈现OK我可以看到它但是我无法点击它,没有来自ButtonCell的selecthandler正在调用:(。 任何想法如何为这个按钮制作selectHandlerActive?

由于

1 个答案:

答案 0 :(得分:0)

我创建了一些新的RowExpander:

public class MTPRowExpander<M> extends RowExpander<M> {

    public static int id = 0;

    public static interface WidgetFactory<M> {
        public Widget createWidget(M model);
    }

    private WidgetFactory<M> wf;
    private Set<Integer> expandedRows;

    public MTPRowExpander(IdentityValueProvider<M> valueProvider,WidgetFactory<M> wf) {
        this(valueProvider,GWT.<RowExpanderAppearance<M>> create(RowExpanderAppearance.class),wf);
    }

    public MTPRowExpander(IdentityValueProvider<M> valueProvider,final RowExpanderAppearance<M> appearance, WidgetFactory<M> wf) {
        super(valueProvider, null, appearance);
        this.wf = wf;
        expandedRows = new HashSet<Integer>();
    }

    @Override
    protected boolean beforeExpand(M model, Element body, XElement row,int rowIndex) {
        if (expandedRows.contains(rowIndex)) {
            return true;
        } else {
            expandedRows.add(rowIndex);
            return super.beforeExpand(model, body, row, rowIndex);
        }
    }

    @Override
    protected String getBodyContent(final M model, int rowIndex) {
        final int curentid = id++;
        Scheduler.get().scheduleFinally(new ScheduledCommand() {
            @Override
            public void execute() {
                Widget widget = wf.createWidget(model);
                com.google.gwt.dom.client.Element item = grid.getElement().childElement(".widget" + curentid);
                item.appendChild(widget.getElement());
                ComponentHelper.setParent(grid, widget);
            }
        });
        return "<div class='widget" + curentid + "'></div>";
    }

}

我知道这个解决方案并不完美,但我不知道如何以更恰当的方式解决问题。