ExtJS 4 MVC 视图的多个实例和子/子控制器的困难

2024-01-13

我在 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(使用前将#替换为@)

ExtJS 4 MVC 视图的多个实例和子/子控制器的困难 的相关文章

  • Extjs4组合框在网格中显示值

    请帮忙 我想展示我的displayValue在网格中 我找到了解决方案here 但我不明白如何使用它 我的代码 columns header Product id combo locked true dataIndex prod id ed
  • ExtJS 4 - 网格 - 禁用特定列的行选择

    我用 extjs 4 创建了一个网格 Selection CheckboxModel 已实现 这意味着无论您在何处单击特定行 都会选择 取消选择该行 现在我想在最后一列上禁用此选择 因为它包含自定义按钮 如果单击按钮 我不想选择该行 有什么
  • 使用 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL

    我想在加载商店之前 更改商店的代理 这种情况下的具体问题是我没有找到正确的时刻 何时加载 详细地 我通过创建 EXTJS4 架构定义的视图 控制器 模型和存储来创建 MVC 模型 该视图是一个网格面板 它在自己的定义语句中定义了存储 Ext
  • 如何在折线图或散点图中添加 3 个以上系列?

    当我尝试在折线图或散点图中添加 3 个以上系列时 出现异常 在谷歌浏览器中 未捕获的类型错误 对象 object Object 的属性 未定义 不是函数 在火狐中 Ext chart Shape type 不是函数 停止此错误 attr E
  • Extjs4自动完成组合框问题

    我正在 extjs php 中工作 自动完成组合框属性 我的视图为 Ext define Balaee view kp Word Word extend Ext form Panel id WordId alias widget Word
  • ExtJS4 LinkBut​​ton 组件

    我正在尝试在 Ext JS 4 中创建自己的 LinkBut ton 组件 没什么新意 对吧 我的代码如下所示 Ext define LinkButton extend Ext Component xtype linkbutton auto
  • 为什么视图的别名定义为“widget.myxtype”?

    我想知道 为什么我们定义的新小部件的别名总是定义为 widget myxtype 小部件 的意义是什么 Alias属性是ExtJs4中新引入的 它是以前版本中 xtype 的替代品 alias中指定的 widget 确实有两个意义 我能想到
  • 为什么 ExtJS 在格式化日期时要减去一天?

    Using ExtJS 4 0 2 我可以在控制台中输入以下内容 Ext util Format date 2012 01 13 m d Y I get 01 12 2012 Why 我可以用以下方法纠正它 Ext util Format
  • 如何通过包含部分字符串的组件名称查询组件

    我想用Ext ComponentQuery query 查询包含某个名称路径的按钮名称 假设我有 4 个按钮 名称声明为 edit btn add btn add2 btn 和 edit2 btn 然后我使用查询 Ext Component
  • ExtJS.Grid上的总结+ajax分页

    我有一个网格 其数据类似于http dev sencha com deploy ext 4 0 1 examples grid array grid html http dev sencha com deploy ext 4 0 1 exa
  • ExtJS 4 MVC 视图的多个实例和子/子控制器的困难

    我在 ExtJS 4 中遇到了 MVC 模式的问题 至少 我认为我遇到过 在向多个人提出这个问题并在 Sencha 论坛上多次发帖后 我现在转向更广泛的受众 希望得到灯泡或确认 Problem 您的应用程序能够打开许多不同的视图 其中一些视
  • 如何在 extjs 网格(单元格编辑)中显示完整列可编辑?

    我正在使用单元格编辑插件来编辑单元格 但这就像当我们单击该列时 它将进入编辑模式 我想显示带有可编辑文本框的完整列 目前我正在使用以下代码使其可编辑 selType cellmodel plugins Ext create Ext grid
  • 如何在Extjs 4中向ajax请求添加beforerequest事件?

    如何在Extjs4中将beforerequest和requestcomplete事件添加到特定的ajax请求 Regards Ext Ajax on beforerequest function console info beforereq
  • 带有 ExtJS 4 存储的 HTTP 标头

    我已经实例化了几家商店 但在某个时刻 我会在所有这些中添加一个 HTTP 标头 我怎样才能用 ExtJS 4 做到这一点 假设您使用的是 ajax 代理 您可以更新headers http docs sencha com ext js 4
  • Extjs 4:创建 iFrame 窗口

    我需要在 Extjs 中创建一个 iFrame 窗口 以前在 ExtJS 3 x 中我会这样做 bodyCfg tag iframe But the WindowExtJS 4 的类似乎没有 bodyCfg 关于如何制作 iFrame Ex
  • (图书馆问题)

    我正在使用 Sencha Architect 和 Extjs 4 并按照此处的基本示例进行操作 http geoext org tutorials quickstart html basic example http geoext org
  • ExtJS 4.1 MVC:如何在加载时将 LoadMask 应用于视口?

    如何申请LoadMask http docs sencha com ext js 4 1 api Ext LoadMask for a 标准 ExtJS MVC 应用程序 http docs sencha com ext js 4 1 gu
  • 如何滚动到网格中的指定记录

    我们如何滚动到网格中定义的记录 记录或索引 使用缓冲渲染器 通过调用以下命令非常容易 grid view bufferedRenderer scrollTo 0 false callback scope 但是如何使用默认渲染器来完成此操作呢
  • 如何使 svg 元素(例如矩形)scrollIntoView?

    我在图形面板中有一个 svg svg 中的所有节点都在另一个面板中列出 我希望通过单击节点列表中的节点 svg 可以滚动到该节点 每个节点都是一个矩形 但我发现只有上边框在视图中 而节点的其余部分仍然在视图之外 有什么办法可以解决这个问题吗
  • 无法使用 JSON 结果将数据呈现到网格列中

    我有一家网格商店 里面有类似的东西 var gridStore Ext create Ext data Store proxy type ajax actionMethods read POST url getECIAgentWrapper

随机推荐

  • 超时已过。在 Azure sql 上完成操作之前超时时间已过

    我需要在 windows azure 上的 global asax 应用程序启动事件上创建一个 sql 数据库 但是我收到此错误 Timeout expired The timeout period elapsed prior to com
  • 有没有办法查看进程每个核心的 CPU 使用率?

    我知道在 perfmon 中您可以看到每个核心的利用率 以及特定进程使用的总 CPU 量 然而 我似乎无法找到一种方法来查看进程使用了 多少CPU 按核心细分 有没有内置的方法来查看这些信息 有没有一种编程方式可以看到这一点 C 首选 我是
  • 如何在这段代码上应用 PyQt QThread

    coding utf 8 from PyQt5 QtWidgets import from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 uic import loadUiTy
  • 无法从其他子表单刷新子表单

    我有一个包含多个子表单的表单 当有人更改其中一个子表单的组合框中的值时 它需要刷新另一个子表单 我正在使用这段代码 但它不起作用 Forms frmDispatchPlanningSheet subfrmExtraDriversForPla
  • Java8 Lambda 和异常

    我想知道是否有人可以向我解释以下奇怪的现象 我正在使用 Java 8 更新 11 鉴于这个方法 private
  • 在运行时获取delphi记录中字段的偏移量

    给定一个记录类型 TItem record UPC string 20 Price Currency Cost Currency end 以及字段的名称作为字符串 如何获取该字段在记录中的偏移量 我需要在运行时执行此操作 要访问的字段的名称
  • 强制 git show 使用 vimdiff 显示 diff

    我该怎么做呢 通过进行更改后git config我可以使用 vimdiff 区分我的分阶段和提交的更改 但是当我这样做时git show我仍然看到旧的普通风格的差异 我该如何让它工作git show还有 尝试使用 git 别名 这是为了gi
  • conf.int 在 3.3 中不再使用 ggplot2、stat_summary

    我正在使用 conf int 在抖动图周围创建框 在将 R 升级到 3 3 之前 这种方法一直有效 是否有已知的修复方法 stat sum df all lt function fun geom crossbar stat summary
  • 如何防止 ckeditor 不在空白 html 标签中添加

    我在 Windows 8 1 操作系统中安装了 Visual Studio 2012 Express 并根据要求在我的项目中使用 CKEditor 我是 CKEditor 的新手 也以正确的方式使用它 但问题是通过在 CKEditor 中的
  • 调用 locale.strxfrm 时 Unicode 字符不在范围内

    我在使用时遇到奇怪的行为locale具有 unicode 输入的库 下面是一个最小的工作示例 gt gt gt x U0010fefd gt gt gt ord x 1113853 gt gt gt ord U0010fefd 0X10fe
  • Created_at 保存时区错误

    我有一个 laravel 应用程序 我正在尝试将用户签入和签出保存到我 的数据库中 我有一个模型Checkins我将其记录为created at和updated at 在我的本地主机上 它保存了我的时区 埃及 的正确时间 我尝试更改app
  • Paypal 地址覆盖不起作用

    我已经设置了一个查询字符串来将信息传递到贝宝 除了地址覆盖功能之外 所有工作都正常 它不会自动使用表格中发布的新地址更新送货地址 我希望能够覆盖现有帐户和新帐户 代码如下 queryString cmd xclick queryString
  • 对于 Windows 有 Win32 API,那么对于 Mac 呢?

    对于 Windows 有 Win32 API 那么对于 Mac 呢 在维基百科上 http en wikipedia org wiki Cocoa API http en wikipedia org wiki Cocoa 28API 29
  • 在 python 中配置根记录器

    我的 Django 设置中有以下日志配置 LOGGING version 1 disable existing loggers False formatters verbose format levelname s asctime s na
  • 无法使用 flutter 中的 SAS 令牌上传到 azure 存储

    我正在尝试使用 SAS 令牌将文件 数据上传到 azure 存储 我使用以下方法成功地在没有 SAS 令牌的情况下实现了这一目标 sendToBlob Uint8List bytes async var storage AzureStora
  • 使 Rails 缓存中的特定模型无效

    我使用 Rails 3 和 Memcached 来缓存一些模型 当模型更改时 我想使该记录的缓存失效 对于视图片段 我只是说expire fragment blah 如何对我的模型执行此操作 我不想说Rails cache clear并失去
  • 计时器错误 java.lang.IllegalStateException

    我试图显示一个标签 说明 JRE 8 中的所有内容仅在 3 秒内正确 因为我无法在 JRE 7 中使用 DatePicker 并且收到此错误 Exception in thread Timer 2 java lang IllegalStat
  • ruby 中 #entries 和 #to_a 之间的区别

    之间的基本区别是什么 entries and to a的方法Enumerableruby 中的模块 两者似乎都返回相同的结果Hash gt gt hash name gt foo age gt 23 gt name gt foo age g
  • 如何更新所使用的quarkus版本

    升级现有应用程序中使用的 quarkus 版本的推荐方法是什么 我查看了我的 pom xml 因为 quarkus 扩展没有指定使用的版本 我假设它们将根据主 quarkus 版本进行更新 与更新相关的属性是 quarkus plugin
  • ExtJS 4 MVC 视图的多个实例和子/子控制器的困难

    我在 ExtJS 4 中遇到了 MVC 模式的问题 至少 我认为我遇到过 在向多个人提出这个问题并在 Sencha 论坛上多次发帖后 我现在转向更广泛的受众 希望得到灯泡或确认 Problem 您的应用程序能够打开许多不同的视图 其中一些视