1

我使用 zk 框架MVVM方法,希望grid每页显示 1000-2000 行。(用户确实需要)但它是很多信息,如果我将我的grid model( List<Object>) 保存在服务器端的内存中,每个用户将消耗大约 30Mb . 我决定在服务器端呈现这种信息并清理内存会更好,但如果我使用这种方法,我应该去客户端编程。(为ajax调用等编写js)找不到解决这个问题的好方法。我应该使用什么auRequestRowRender或者Render script在客户端或者在渲染网格之后只是空数据?

UPD:祖尔

<grid apply="org.zkoss.bind.BindComposer"
      viewModel="@id('vm') @init('Pojo')"
      self="@define(content)" height="100%" width="100%">
      model="@load(vm.o)" emptyMessage="${c:l('empty_table')}"
      stubonly="true" onCreate="@command('clear')">
   <columns>
      ...cols...
   </columns>
   <template name="model">
      <row>
           <label value="@load(each.data)" />
      </row>
   </template>
</grid>

爪哇:

 public class Pojo {

     private List<Object> o;
     private Grid g;

     @Init
     public void init(){
        o = loadFromDaoOneHundredItems()
     }

     @AfterCompose
     public afterCompose(@ContextParam(ContextType.VIEW) Component view){
          g.setPageSize(1000);
     }
 }

UPD

    final Rows rs = new Rows();
    for (int i = 0; i < 1000; i++) {
        final Row r = new Row();
        r.appendChild(new Label("sdf"));
        r.appendChild(new Label("sdf"));
        r.appendChild(new Label("sdf"));
        rs.appendChild(r);
    }
    grid.appendChild(rs);
    ListModelList<Object> o = null;
    grid.setModel(o);
4

1 回答 1

0

ZK 提供了许多方法来处理你的逻辑客户端。
首先你应该阅读客户端zk手册的通信部分
此外,这个遮阳篷应该很有帮助。

你应该知道,model="@load(vm.o)"调用Grid.setModel(...)
并保存一个引用,这样javas gc就不会删除数据。

所以我认为解决这个问题的唯一方法是,即使它
打破了我对 MVVM 的理解,仍然使用 MVVM,那就是调用

onCreate="@command('createRows',grid=self)"

并添加一个方法

@Command("createRows")
public void createRows(@BindingParam("grid") Grid grid){
 //add rows manually here
}

但我不得不说,对于你的任务,我更喜欢使用 ZK MVC,
因为更好的可读性/可维护性和更多的 java 控制 cos。

于 2012-12-18T12:34:32.903 回答