Events ZK生成按钮,侦听器指向作曲家';s法

Events ZK生成按钮,侦听器指向作曲家';s法,events,onclick,event-listener,zk,Events,Onclick,Event Listener,Zk,我正在使用ZK框架,我需要使用我正在实现的“ListItemRenderer”生成一个。问题是,我需要在渲染器中生成一个按钮,指向带有onClick事件的作曲家的方法。代码如下: 祖尔 但结果是一样的 我想我需要向按钮或composer添加一个EventListener,但我不知道如何在composer和渲染器之间指向正确的方法 感谢您的帮助和/或指导。提前感谢您的回答。使此通用化的最佳方法是创建一个以作曲家为参数的构造函数。 当然,并不是每个编写器都有这个方法,所以您需要创建一个接口,在编写器

我正在使用ZK框架,我需要使用我正在实现的“ListItemRenderer”生成一个
。问题是,我需要在渲染器中生成一个按钮,指向带有
onClick
事件的作曲家的方法。代码如下:

祖尔 但结果是一样的

我想我需要向按钮或composer添加一个
EventListener
,但我不知道如何在composer和渲染器之间指向正确的方法


感谢您的帮助和/或指导。提前感谢您的回答。

使此通用化的最佳方法是创建一个以作曲家为参数的构造函数。
当然,并不是每个编写器都有这个方法,所以您需要创建一个接口,在编写器上设置什么

public interface ButtonListboxRenderer {
    void onClickListboxButton(); // of course with return type and arguments you need.
}
然后,您的渲染器:

public class MyRenderer implements ListitemRenderer<MyItem> {
    private final ButtonListboxRenderer composer;

    public MyRenderer(ButtonListboxRenderer composer) {
        this.composer = composer;
    }

    ...



  private void addButton(Listcell parent, 
            String label, 
            String id, 
            int index, 
            String width,
            String forwardAction) {
        Button btn = new Button(label);
        btn.setId(id + "_" + index);
        btn.setClass(id); // Second try
        btn.setWidth(width);
        // add eventlistener to the button and you can point to the method of the composer.
        btn.setParent(parent);
    }
}
公共类MyRenderer实现ListitemRenderer{
私有最终按钮ListBoxRenderer composer;
公共MyRenderer(ButtonListboxRenderer编写器){
this.composer=作曲家;
}
...
私有void addButton(列表单元格父项,
字符串标签,
字符串id,
整数索引,
字符串宽度,
字符串转发(操作){
按钮btn=新按钮(标签);
btn.setId(id+索引);
btn.setClass(id);//第二次尝试
btn.设置宽度(宽度);
//将eventlistener添加到按钮,您可以指向编写器的方法。
btn.setParent(父级);
}
}

你说得有道理。不应该是
专用选择器或composer composer composer composer
而不是自定义界面?如何在渲染器中输入作曲家?我的意思是:你在ZUL中声明了渲染器,但是你需要指定编写器,不是吗?你可以在编写器中附加渲染器。如果使用selectorcomposer,则无法调用您的方法,因为selectorcomposer不知道您的自定义方法。
package pkg

public class MyRenderer implements ListitemRenderer<MyItem> {

    @Override
    public void render(Listitem item, MyItem data, int index) throws Exception {
        // Some rendering...

        Listcell actionCell = new Listcell();
        this.addButton(actionCell, "Action 1", "btn_action1", index, "50%",
                "onClick=mywin$MyComposer.action");
        // another button (doesn't matter) ...
        actionCell.setParent(item);

    }

    private void addButton(Listcell parent, 
            String label, 
            String id, 
            int index, 
            String width,
            String forwardAction) {
        Button btn = new Button(label);
        btn.setId(id + "_" + index);
        btn.setClass(id); // Second try
        btn.setWidth(width);
        ComponentsCtrl.applyForward(btn, forwardAction); // First try
        btn.setParent(parent);
    }
}
@Listen("onClick = .btn_action1")
public void actiion() {...}
public interface ButtonListboxRenderer {
    void onClickListboxButton(); // of course with return type and arguments you need.
}
public class MyRenderer implements ListitemRenderer<MyItem> {
    private final ButtonListboxRenderer composer;

    public MyRenderer(ButtonListboxRenderer composer) {
        this.composer = composer;
    }

    ...



  private void addButton(Listcell parent, 
            String label, 
            String id, 
            int index, 
            String width,
            String forwardAction) {
        Button btn = new Button(label);
        btn.setId(id + "_" + index);
        btn.setClass(id); // Second try
        btn.setWidth(width);
        // add eventlistener to the button and you can point to the method of the composer.
        btn.setParent(parent);
    }
}