又是我 :)

我正在尝试通过以下方式扩展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个选择:
  • Mixin,它将为选定的网格添加以下功能
  • 以具有以下两个参数的方式扩展网格组件:

    一个。 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" />
    

    09-27 21:18