ExtJS4 - 按面板实例存储?

Mad*_*d0g 6 extjs extjs4 extjs-mvc

我真的很喜欢Ext中的MVC模式.我有一个带有同一组件的多个实例的tabpanel(让我们称之为产品),每个应该在打开时调用服务器,并带有id参数.

现在,为了创建这些选项卡 - 我在产品控制器中使用它来创建一个新的视图实例,但我觉得它确实是不正确的.

createMainView: function (opts) {
    return Ext.widget("productDisplay", opts);
}
Run Code Online (Sandbox Code Playgroud)

我从我的"主"控制器中调用它,如下所示:

var tab = this.application.getController("Products")
    .createMainView({ productId : id, closable: true })

tabs.add(tab);
tabs.setActiveTab(tab);
Run Code Online (Sandbox Code Playgroud)

正确使用视图的多个实例的正确方法是什么,每个实例都有一个存储和行为的实例(通过控制器).

我可以为它们使用一个命名存储(在app/store/product.js下有一个js文件)吗?

我应该load从控制器手动呼叫商店(通过productId),还是有更好的方法?

sha*_*sha 6

这是一个非常广泛和有趣的问题,需要大量和彻底的解释(你可以在他们的指南和手册中找到Sencha.com上的顺便说一句).我想强调几点,所以你有一些东西可以开始:

  1. 商店通常是全球对象.一般情况下,您不会保留一个商店的两个实例.如果需要在多个不同视图中显示该存储中的信息,则可以使用过滤(本地或远程).您需要克隆商店的唯一时间是您希望同时在2个以上的不同视图中显示该商店的不同信息.

  2. 控制器通常由主应用程序对象生成.您无需做任何特别的事情 - 只需在controllers: []房产中列出即可.然后在启动应用程序时(在创建和呈现它们的视图之前)生成.记在脑子里.

  3. 如果您有模态视图 - 可以手动创建它并重新使用它或销毁并在以后重新创建.您可以向创建这些视图的控制器添加过滤和加载.如果需要,您可以为不同的选项卡重复使用相同的视图/控制器对象.

  4. 如果您的视图呈现对象的一个​​实例(如每个选项卡上显示一个产品) - 请勿将商店附加到这些视图.只需通过他们个人模型(记录).