Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS4-存储每个面板实例?_Extjs_Extjs4_Extjs Mvc - Fatal编程技术网

ExtJS4-存储每个面板实例?

ExtJS4-存储每个面板实例?,extjs,extjs4,extjs-mvc,Extjs,Extjs4,Extjs Mvc,我对Ext中的MVC模式非常陌生。 我有一个tabpanel,其中包含同一组件的多个实例(我们称之为product),每个实例在打开服务器时都应该调用服务器,并带有一个id参数 现在,为了创建这些选项卡,我在Product controller中使用它 这会创建一个视图的新实例,但我觉得它确实不正确 createMainView: function (opts) { return Ext.widget("productDisplay", opts); } 我从“主”控制器调用它,如下所

我对Ext中的MVC模式非常陌生。 我有一个tabpanel,其中包含同一组件的多个实例(我们称之为product),每个实例在打开服务器时都应该调用服务器,并带有一个id参数

现在,为了创建这些选项卡,我在Product controller中使用它 这会创建一个视图的新实例,但我觉得它确实不正确

createMainView: function (opts) {
    return Ext.widget("productDisplay", opts);
}
我从“主”控制器调用它,如下所示:

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

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

我可以为他们使用一个命名的商店吗(在app/store/product.js下有一个js文件)


我应该从控制器手动调用商店上的
load
(以传递
productId
),还是有更好的方法?

这是一个非常广泛和有趣的问题,需要详细的解释(顺便说一句,你可以在Sencha.com的指南和手册中找到)。我想强调几点,让您从以下几点开始:

  • 存储通常是全局对象。一般来说,您不会保留一个商店的两个实例。如果需要在多个不同视图中显示来自该存储的信息,可以使用筛选(本地或远程)。您需要克隆存储的唯一时间是,如果您希望同时在2个以上的不同视图中显示来自该存储的不同信息

  • 控制器通常由主应用程序对象生成。您不必做任何特殊的操作-只需在
    控制器:[]
    属性中列出它们即可。然后在应用程序启动时(在创建和渲染视图之前)停止。记住这一点

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

  • 如果视图显示一个对象的一个实例(如每个选项卡上显示一个产品),则不要将存储附加到这些视图。只需将单个模型(记录)传递给他们即可


  • 我建议在视图的initComponent方法中创建仅与该视图实例相关的存储

    控制器的
    控件
    处理程序的编码方式应确保它们能够区分发送事件的视图。这应该不会太困难,因为几乎所有视图事件都包含对触发事件的组件的引用。然后,您可以使用相对查询选择器,例如:
    myEventFiringComponent.up('anotherComponent')
    myEventFiringComponent.down('anotherComponent')
    ,在需要时在同一视图中获取不同组件的句柄


    请查看完整的解释。

    谢谢您的回答。我以前见过商店过滤的例子,但那是当有一个视图提供过滤后的数据时,在我的例子中,有多个选项卡同时存在,每个选项卡显示不同的数据(相同类型,这就是为什么我要求复制商店),它们不是模态的(如果你是指类似于提示的模态),它们同时存在。那么,在每个视图中需要存储(基本上是数组)还是只需要模型(记录)?我不知道记录可以在存储之外使用-我想这就是模型可以有代理的原因。单个记录是否可以具有加载/保存/绑定功能?如果您只是将记录上的引用传递给视图/控制器,并且您的存储具有autoSync:true,则所有内容都应该透明地工作。另外,如果您需要从这样的视图/控制器调用store方法-记录确实引用了它的存储-您可以调用它。所以它必须事先在存储中?如果它是一个分页存储,而记录不再在存储中,该怎么办?它还能正常地
    autoSync
    吗?感谢Geronimo,这正是我最终要做的。我正在
    initComponent
    下创建存储,并确保
    this.control
    下的所有内容都可以引用特定视图(还有什么不可以-我尝试用自己的
    fireEvent
    包装)。