我是ZK框架的新手[newbie]版本5.0.8 MVC方法我试图实现一个组件,它们的列彼此独立....我想要做的就是能够代表数据2列,能够响应每列的点击
像
这样的东西-----------------------------------
Company----Company
Oracle IBM
Microsoft Xerox
HP Apple
-----------------------------------
如果我点击IBM我想不要点击Oracle ..... [在同一个组件中我的意思是我不想创建2个网格或2个列表框或者其他]
这可能吗?非常感谢。答案 0 :(得分:1)
目前尚不清楚您在独立性方面究竟需要什么。您是在寻找数据模型的分离,还是只想为每个渲染的单元格寻找不同的事件监听器?
关于事件监听器,将监听器附加到您想要的任何内容都非常容易。在ZK中,HTMLBasedComponent是常见的根组件之一,支持onClick
,onDoubleClick
,onRightClick
等。
由于这些ZK组件是动态创建的,因此您不能wire event listeners使用@Listen
注释。问题是您事先没有单元格的id。
相反,渲染时需要programmatically create the EventListener
。
// in your RowRenderer
public void render(Row row, Data data, int index) {
Label column1 = new Label(data.getOne());
Label column2 = new Label(data.getTwo());
column1.setParent(row);
column2.setParent(row);
column1.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
public void onEvent(Event event) {
// handle event
}
});
column2.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
public void onEvent(Event event) {
// handle event
}
});
}
请注意,在此处实现,您为每个呈现的单元格创建一个新的EventListener
。这不是非常有效,所以如果你可以使你的EventListener
无状态并将必要的数据附加到Label
本身,你可以节省大量的计算。
关于代码分离,如果您的数据模型是面向列而不是按行,那么您将找不到满足此要求的标准ZK组件。也就是说,Grid
和Listbox
等组件使用RowRenderers
等呈现为从顶部开始的行。如果这是您的问题,您将需要滚动自己的组件。这比听起来容易得多。
public class ColumnGrid extends Hlayout {
private ColumnListModel model;
private ColumnRenderer<? extends Component> renderer;
public void setModel(ColumnListModel model) {
this.model = model;
}
public void setRenderer(ColumnRenderer renderer) {
this.renderer = renderer;
}
public void onCreate() {
for (int i=0; i<model.size(); i++) {
Column col = new Column();
appendChild(col);
renderer.render(col, model.getElementAt(i), i);
}
}
}
public class Column extends Vlayout {}
public interface ColumnRenderer<T extends Component> {
render(Column column, T data, int index);
}
这只是一个骨架,但你明白了。
您甚至可以在zul
文件中使用它:
<?component name="colGrid" class="com.sean.is.cool.ColumnGrid" ?>
<colGrid model="myModel" renderer="myColRenderer"/>
答案 1 :(得分:0)
在像zk的Components
这样的表格中,总共等于一行
到一个对象和一个列到该对象的属性。
这意味着,Listbox
和Grid
对您无济于事
如果你使用zk的EE版本,我想你可能想使用Choosenbox。
否则,我认为没有Component
。