如何从表单中获取所有值?

时间:2013-08-23 13:28:57

标签: extjs extjs4

我绝对肯定做错了,我没有解决。我有一个表单组件,包括几个文本字段,单选按钮以及窗口。如果我使用以下代码:

console.log(Discounts.getForm().getValues());

// Discount is form name which is defined like below
var Discounts = Ext.create('Ext.form.Panel', {
    ...
}

我可以看到除grid panel之外的所有值,其中包含window组件(说实话我看不到所有其他窗口值!)。

如下所示的组件树:

+-- FORM PANEL ( layout card )
  |
  +-- CARD LAYOUT - 1
  | |
  | +- COMBOBOX
  | +- TEXTFIELD
  |
  +-- CARD LAYOUT - 2
  | |
  | +- WINDOW
  |  |
  |  +- GRID PANEL
  |
  +-- CARD LAYOUT - 3
  | |
  | +- RADIO GROUP

你知道我做错了什么吗?

例如,我希望将winArticle窗口字段值和Discount形式放在一起。

PS:代码非常大,所以我推出了JSFiddle。

Source

1 个答案:

答案 0 :(得分:1)

你在formpanel中有一个formpanel,通过给孩子formpanel一个itemId并使用像Discounts.down('#yourchildformpanelitemid').getValues()之类的组件查询你可能得到它的值......

但是,由于您的代码无法维护,我的建议是重构/重构您的代码并使用MVC结构。来自Sencha:

  

大型客户端应用程序一直很难写,很难   组织和维护。他们往往会迅速成长   控制为项目添加更多功能和开发人员。分机   JS 4带有一个新的应用程序架构,不仅可以组织   你的代码,但减少了你必须写的数量。

您需要重新构建代码并单独定义组件。这将使您的应用程序可维护。在您的情况下,您创建的formpanel将是一个单独的组件并拥有自己的控制器,因此您可以在其他地方使用相同的formpanel。

另外,请阅读Sencha的以下文章,以避免ExtJS做法:
http://www.sencha.com/blog/top-10-ext-js-development-practices-to-avoid/

这些提示中的大多数(如果不是全部)都适用于您的代码。 例如,你正在疯狂地嵌套组件。大多数嵌套都是不必要的。例如:

...
items: [
    {
        xtype: 'form',
        items: new Ext.Panel({
            items: [
                {
                    xtype: 'fieldset',
                    ...

xtype: 'form'创建了一个表单面板,为什么要在其中创建一个面板?

有关ExtJS MVC架构的更多信息: http://docs.sencha.com/extjs/4.2.0/#!/guide/application_architecture