Model view controller ExtJS4MVC组合框

Model view controller ExtJS4MVC组合框,model-view-controller,extjs4,Model View Controller,Extjs4,我是Ext JS的新手。在这里,我尝试使用Store填充ComboBox。我可以看到combobox呈现,但没有下拉值。请有人检查并告诉我下面的代码有什么问题 app.js:- Ext.Loader.setConfig({ enabled: true }); Ext.application({ name: 'MVCCombo', controllers: ['Skills'], autoCreateViewport: true }); Ext.d

我是Ext JS的新手。在这里,我尝试使用Store填充ComboBox。我可以看到combobox呈现,但没有下拉值。请有人检查并告诉我下面的代码有什么问题

app.js:-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  
控制器(Skills.js):-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  
商店(Skills.js):-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  
模型:(Skill.js):-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  
视图(ViewPort.js):-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  
查看(Skill.js):-

Ext.Loader.setConfig({
    enabled: true
    });


Ext.application({
    name: 'MVCCombo', 
    controllers: ['Skills'],
    autoCreateViewport: true

});
Ext.define('MVCCombo.controller.Skills', {
            extend : 'Ext.app.Controller', 
            //define the stores
            stores : ['Skills'],
            //define the models
            models : ['Skill'],
            //define the views
            views : ['combo.Skill'],
            init: function() {
                alert("Controller Invoked");
            }
    });
Ext.define('MVCCombo.store.Skills', {
        extend:'Ext.data.Store', 
        model:'MVCCombo.model.Skill',
        data: [{
            "id": "1",
            "name": "Java"
        }, {
            "id": "2",
            "name": "J2EE"
        }, {
            "id": "3",
            "name": "Ext JS"
        }
        ]
    });
Ext.define('MVCCombo.model.Skill', {
    extend: 'Ext.data.Model',
    fields: [{name:'id', type:'string'},{name:'name', type:'string'}]
});
Ext.define('MVCCombo.view.Viewport', {
    extend: 'Ext.Viewport',    
    layout: 'fit',
    requires: [
        'MVCCombo.view.combo.Skill'
    ],
    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            items: [                
                {
                    xtype: 'cmbBox'
                }
            ]
        });

        me.callParent(arguments);
    }
});
Ext.define('MVCCombo.view.combo.Skill' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.cmbBox',    
    allowBlank: false,
    queryMode: 'local',
    valueField: 'id',
    displayField: 'name', 
    store: 'Skills' 
});  

正如德布林所建议的,我做了一个简短的回答。我(偶然)发现视口上的
布局
选项是问题的根源。尝试以下解决方案之一:

  • 删除
    布局
    选项
  • 将组合包装在面板中

更改小部件别名,别名/小部件必须小写:


别名:“widget.cmbBox”改为别名:“widget.cmbBox”

如果您用代码创建了一个jsfiddle.net示例,将会有所帮助