我无法让我的应用程序使用MVC架构。
以下是代码:
Ext.application({
name: CONFIG.APP_NS,
appFolder: '../js/app',
autoCreateViewport: true,
/*
models: ['User'],
stores: ['Users'],
//*/
controllers: ['Main', 'Tab', 'Import', 'Export', 'Predict', 'Admin']
});
Ext.define(CONFIG.APP_NS+'.controller.Import', {
extend: 'Ext.app.Controller',
//stores: ['Users'], //Uncommenting this makes the application not load at all
models: ['User'],
views: ['Import.Window', 'Import.Toolbar', 'Import.Grid'],
init: function(){
...
},
...
});
Ext.define(CONFIG.APP_NS+'.model.User', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'username', type: 'string'},
{name: 'password', type: 'string'},
{name: 'salt', type: 'string'},
{name: 'firstName', type: 'string'},
{name: 'lastName', type: 'string'},
{name: 'email', type: 'string'},
{name: 'admin', type: 'boolean'},
{name: 'authenticated', type: 'boolean'}
],
hasMany: {model: CONFIG.APP_NS+'.model.Roles', name: 'roles'},
proxy: {
type: 'ajax',
url: 'model/users',
reader: {
type: 'json'
}
}
});
Ext.define(CONFIG.APP_NS+'.model.Roles', {
extend: 'Ext.data.Model',
fields: [
{name: 'role', type: 'string'}
],
belongsTo: CONFIG.APP_NS+'.model.User'
});
Ext.define(CONFIG.APP_NS+'store.Users', {
extend: 'Ext.data.Store',
requires: CONFIG.APP_NS+'.model.User',
model: CONFIG.APP_NS+'.model.User'
});
Ext.define(CONFIG.APP_NS+'.view.Import.Grid', {
extend: 'Ext.grid.Panel',
alias: 'widget.importgrid',
initComponent: function() {
this.store = Ext.create('Ext.data.Store', { //Works fine with the code as it is
model: CONFIG.APP_NS+'.model.User',
proxy: {
type: 'ajax',
url: 'model/users',
reader: {
type: 'json'
}
}
});
//*/
//this.store = Ext.create(CONFIG.APP_NS+'.store.Users', {});
this.columns = [
{header: 'Name', dataIndex: 'username', flex: 1},
{header: 'Email', dataIndex: 'email', flex: 1}
];
this.callParent(arguments);
this.store.load();
}
});
我已经尝试了几乎所有商店的组合:在不同的文件中,似乎没有什么可以做的。如果我没有在任何地方包含商店,我会收到错误对象不是函数(或者 TypeError:如果在未定义的之外定义,则无法调用方法'<内部extjs文件中的某个地方的视图中的em> initComponent 。似乎即使我从教程示例中复制结构,它仍然不起作用,所以我必须遗漏一些东西。
我做错了什么?
感谢您的时间。
我在Wamp(localhost)上运行此代码。服务器安装并运行了ExtJS4和Symfony。
更新了错误消息。
修正了模型中的拼写错误,请参阅评论。
答案 0 :(得分:2)
(我看到你在app.js中注释了这些商店。这是故意吗?)
我遇到了类似的问题..只要我将商店添加到我的app.js和view.js(网格面板),我的应用就停止了工作。
我很确定通过将商店(所有商店)添加到控制器和 app.js来修复它。好的..刚刚再次检查,如果来自controller.js的商店丢失,我会收到一条不同的错误消息:“未捕获的TypeError:无法调用未定义的方法”(这是在chrome上)。稍有不同的错误信息。
另外,考虑注释掉this.store.load()..即删除服务器数据访问变量 - (一次一件事。)
答案 1 :(得分:2)
我发现了这个错误。
Ext.define(CONFIG.APP_NS+'store.Users', {
extend: 'Ext.data.Store',
requires: CONFIG.APP_NS+'.model.User',
model: CONFIG.APP_NS+'.model.User'
});
第一行应该是:
Ext.define(CONFIG.APP_NS+'.store.Users', {
我错过 store 之前的一段时间。
Molecule Man的评论让我重新检查了所有的定义,谢谢。