我在 ExtJS 4 中遇到了 MVC 模式的问题。至少,我认为我遇到了。在与多个人接触过这个问题,并在 Sencha 论坛上多次发帖后,我现在转向更广泛的受众,希望得到一个灯泡或确认。
问题
您的应用程序能够打开许多不同的视图,其中一些本身就是迷你应用程序。此外,用户可能希望打开一个视图的多个并发副本。
此应用程序是一个单页客户端 Javascript 应用程序。
ExtJS 4 MVC 模型希望您在 Application 类中定义所有控制器。然后在应用程序加载时初始化这些控制器。控制器跟踪视图、模型和存储。
当您多次初始化控制器 A 时,例如创建多个视图副本,您最终会得到两个引用相同数据存储的视图,并在功能上将重复事件发送到应用程序事件总线。
我通过向 Component 和 Controller 添加新的原型方法来重构我的应用程序,以允许 a) 子控制器(我的一些控制器变得非常庞大)和 b) 专门为它们使用的视图定义存储。模型仍然可以在控制器上定义,只是为了便于处理程序在您需要执行诸如从服务器获取记录之类的操作时使用。
问题
我对 MVC 的理解让我相信模型与 View 的关系比 Controller 更直接。我假设 ExtJS 4 决定将存储(我认为可以被视为更经典模型的包装器)附加到控制器,以鼓励重用加载的数据,并优化同一个类的多个副本实例化. 但是,在我看来,如果打算让用户使用多个视图实例,则无法做到这一点。在我看来,拥有多个实例是 OO 框架中的一个重要选项,因此我逆势而上并在一些 Ext 基类上实现了原型。(谢谢Ext.implement!)。
有没有办法使用开箱即用的 MVC 类并使用提供的 setter、getter 等来让视图的多个并发实例加载不同的数据?