Extends类进行ajax调用

时间:2013-09-14 05:41:25

标签: ajax inheritance extjs

我是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配置为不查找此文件吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

是的,每个类都必须在自己的文件中才能使Ext Loader正常工作。此外,文件的名称应与类相同,其路径应与命名空间匹配。

这里发生的是extend: 'MyDesktop.UserModel'行提示Ext.Loader加载UserModel类,它希望在根路径中的UserModel.js文件中找到MyDesktop命名空间,似乎被配置为应用程序的根目录...

您可以使用Loaderpathsone of the Application属性为不同的命名空间配置根源目录。

如果您想阻止Ext尝试加载此文件,则必须disable加载程序,然后您必须在HTML中将所有源文件包含为<script>标记。我认为这也将使以后无法编译应用程序的生成版本。

或者,您可以将MyDesktop.UserModel 的定义高于 MyDesktop.DealerModel的定义,或者放在脚本标记中的同一文件或文件中。请注意,即使这可能也不起作用,因为类定义中的requires选项可能会更改实际执行类定义的顺序。然后,这可能最终打破构建过程......

简而言之,您不应该再次尝试框架的期望。特别是当你认为类名和文件系统之间的1:1映射是大约每种OO语言的标准做法时......