我是ExtJS 4的新手,我在扩展课时遇到了问题。我有这些文件:
UsersWindow.js
Ext.define('MyDesktop.UserModel', {
extend: 'Ext.data.Model',
/* ... */
}
Ext.define('MyDesktop.UsersWindow', {
/* ... */
}
DealersWindow.js
Ext.define('MyDesktop.DealerModel', {
extend: 'MyDesktop.UserModel',
/* ... */
}
Ext.define('MyDesktop.DealersWindow', {
extend: 'MyDesktop.UsersWindow',
/* ... */
}
当我运行应用程序时,一切都按预期工作,但是,我有这个ajax调用:
/UserModel.js?_dc=1379135132790
给出404,然后解析javascript时出错。我想知道为什么ExtJS打这个电话?每个班级都应该在自己的档案中吗?我可以将ExtJS配置为不查找此文件吗?
感谢您的帮助。
答案 0 :(得分:1)
是的,每个类都必须在自己的文件中才能使Ext Loader正常工作。此外,文件的名称应与类相同,其路径应与命名空间匹配。
这里发生的是extend: 'MyDesktop.UserModel'
行提示Ext.Loader
加载UserModel
类,它希望在根路径中的UserModel.js
文件中找到MyDesktop
命名空间,似乎被配置为应用程序的根目录...
您可以使用Loader
或paths
的one of the Application
属性为不同的命名空间配置根源目录。
如果您想阻止Ext尝试加载此文件,则必须disable加载程序,然后您必须在HTML中将所有源文件包含为<script>
标记。我认为这也将使以后无法编译应用程序的生成版本。
或者,您可以将MyDesktop.UserModel
的定义高于 MyDesktop.DealerModel
的定义,或者放在脚本标记中的同一文件或文件中。请注意,即使这可能也不起作用,因为类定义中的requires
选项可能会更改实际执行类定义的顺序。然后,这可能最终打破构建过程......
简而言之,您不应该再次尝试框架的期望。特别是当你认为类名和文件系统之间的1:1映射是大约每种OO语言的标准做法时......