【问题标题】:A master/slave panel in Extjs 5 MVCExtjs 5 MVC 中的主/从面板
【发布时间】:2015-01-19 10:26:50
【问题描述】:

我正在使用由面向 MVC 的代码样式提供支持的 Extjs5.1。
我有一个从 Ext.panel.Panel 继承的带有边框布局的主视图。

  • 在东部地区,有一个网格,其中包含多个记录(或“模型”,我真的不知道我应该在这里使用什么术语)。 (“主网格”)
  • 在中心区域,还有另一个继承自 Ext.form.Panel 的视图,它应该显示网格的选定项。 (“奴隶形式”)

我的目标是用“主网格”的选定记录刷新“从窗体”。

我发现在网格和表单之间“通信”的唯一方法是从主视图控制器执行 fireEvent('selectRecord', ...) 并在表单视图控制器中监听他,但它看起来很奇怪,因为表单视图是主视图的子项。

有没有更常见的方法来做到这一点?

因此,直接让另一个视图的视图调用函数是一种很好的做法,还是应该只让它们各自的控制器交互?

【问题讨论】:

标签: forms extjs model-view-controller master-slave


【解决方案1】:

我通常做的并且我相信这是最常见的方法是使用 selectionchange 事件监听器,它可以像这样更新您的表单:

listeners : {
    selectionchange: function(model, records) {
        var rec = records[0];
        if (rec) {
            formpanel.getForm().loadRecord(rec);
        }
    }
}

为此,表单字段的name 属性必须与网格存储模型中的字段名称匹配。

这里有一个例子:http://dev.sencha.com/extjs/5.1.0/examples/kitchensink/#form-grid

【讨论】:

  • 谢谢。我的问题主要是要知道直接访问另一个视图而不是使用它的控制器是否不是一个坏习惯。
  • 你应该使用网格控制器来监听 selectionchange 事件,不需要使用表单面板的控制器。我使用视图控制器创建了这个小提琴,所以你有一个想法fiddle.sencha.com/#fiddle/gn0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 2013-10-25
相关资源
最近更新 更多