又是我 :)
我正在尝试通过以下方式扩展Tapestry Grid的以下行为。
目前,我可以选择每页要显示的行数,如下所示:
<t:grid class="t-form-loop"
t:source="myGridDataSource"
t:model="myBeanModel"
t:row="myEntry"
t:encoder="myEncoder"
t:rowsPerPage="20"
t:pagerPosition="both"
t:rowIndex="currentIndex"
t:inplace="true">
我希望
rowsPerPage
的部分可以动态更改,这意味着用户可以单击预定义的数量(10,20,50,100)之一,或仅输入自己希望的每页显示的行数。一种肮脏的方法(不是很聪明的方法)是为此提供链接/输入并将其保存在我的页面上的变量中,因此网格可以像这样引用它:
t:rowsPerPage="myRowsPerPage"
但是,假设我有20-30页。在它们的每一个上添加相同的代码将是无用且愚蠢的,因此我假设我想以某种方式装饰现有的网格。但是,我不希望在全局范围内执行此操作,因为在某些页面上我希望提供此功能,而在某些页面上则不希望提供。
因此,鉴于我对Tapestry的了解有限,我假设我有2个选择:
一个。
t:rowsPerPageValues="10,20,50,100"
b。 t:rowsPerPageInput="true"
另外,我想知道当前显示多少行。
解决此问题的最佳方法是什么?我可以在实施这些方法方面获得一些帮助/提示吗?
编辑:我希望它看起来像这样(不好的HTML抱歉):http://jsfiddle.net/ZST4E/1/
最佳答案
我认为您应该创建一个具有嵌入式t:grid
的新组件。您可能会发现publishParameters会有所帮助。
例如:
ExtendedGrid.java
public class ExtendedGrid {
@Component(id="grid", publishParameters="source,inplace,etc,etc")
private Grid grid;
@Property
private int rowsPerPage;
}
extendedGrid.tml
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<t:form zone="gridZone">
<t:select t:id="rowsPerPage" model="[10,20,50,100]" /> <t:submit />
</t:form>
<t:zone t:id="gridZone">
<t:grid t:id="grid" rowsPerPage="prop:rowsPerPage" />
</t:zone>
</t:container>
page.tml
<t:extendedGrid source="mySource" inplace="true" />