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