我在 ExtJS 4 中遇到了 MVC 模式的问题。至少,我认为我遇到过。在向多个人提出这个问题并在 Sencha 论坛上多次发帖后,我现在转向更广泛的受众,希望得到灯泡或确认。
Problem
您的应用程序能够打开许多不同的视图,其中一些视图本身就是小型应用程序。此外,用户可能希望打开一个视图的多个并发副本。
该应用程序是单页客户端 Javascript 应用程序。
ExtJS 4 MVC 模型希望您在 Application 类中定义所有控制器。当应用程序加载时,这些控制器将被初始化。控制器跟踪视图、模型和存储。
当您多次初始化控制器 A 时,例如创建视图的多个副本,您最终会得到两个引用相同数据存储的视图,并在功能上将重复事件发送到应用程序事件总线。
我通过向组件和控制器添加新的原型方法来重构我的应用程序,以允许a)子控制器(我的一些控制器变得非常大)和b)专门为它们使用的视图定义存储。这些模型仍然可以在控制器上定义,只是为了在您需要执行诸如从服务器获取记录之类的操作时方便处理程序使用。
Question
我对 MVC 的理解使我相信模型与视图的关系比与控制器的关系更直接。 我认为 ExtJS 4 决定将存储(我认为可以看作是更经典模型的包装器)附加到控制器,以鼓励重用加载的数据,并进行优化,避免拥有许多副本实例化同一个类。然而,在我看来,如果想要为用户提供多个视图实例,则无法做到这一点。在我看来,拥有多个实例是 OO 框架中的一个重要选项,因此我逆势而上,在一些 Ext 基类上实现了原型。 (谢谢Ext.implement!)。
有没有办法让视图的多个并发实例加载不同的数据使用开箱即用的 MVC 类并使用提供的 setter、getter 等?
我遇到了类似的问题:
考虑 CRM 类型应用程序的选项卡面板,它为每个客户端打开视图的新实例。并假设选项卡视图包含 3 或 4 个行编辑网格面板,用于与与该客户端相关的不同数据集合进行交互。
我想出的解决方案是基于this http://www.sencha.com/forum/showthread.php?140986-MVC-Multiple-instances-of-Controllers来自 Sencha 论坛。简而言之,几乎所有从视图分派的事件都包含对视图本身的引用。我的控制器控制函数中的处理程序都使用这些来获取对正确视图实例的引用。
为了处理所需的同一商店的多个实例,我从那篇文章中牢记了这一点:
对于视图上的 Store 实例或全局实例...取决于
需要。如果您要在全球范围内使用,那么请将其设为全球范围。如果你
只需要在视图上需要它,然后将其放在视图上。 MVC 是
不是法律,您可以更改它以满足您的需要。从技术上讲
MVC 的控制器部分应该是两者之间的中间人
视图和模型部件,但有时这是不需要的。我创造
95% 的时间里商店都在视图中。我给你举个例子...
如果您有产品商店,您可能只需要参考
存储在你的网格中。这通常不需要其他部分
应用程序。但是,如果您有一个商店可以加载国家/地区,我
经常在全球范围内需要它,所以我只需加载它一次,然后就可以
在多个视图中设置/使用该存储。
因此,我只是在视图的 initComponent 方法内创建了与视图实例具体相关的所需存储。该应用程序确实有一些全局商店,我按照 MVC 建议将它们创建为商店类。将视图实例存储封装在视图内效果很好。然后我只需要一个控制器实例。
具体回答你的问题,目前,没有 ExtJS 官方建议或配置来处理使用相同存储构造函数的同一视图的多个实例。我花了一些时间寻找类似的东西,我发现的最好的就是他们的论坛版主之一的推荐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)