0

我对 ExtJS 4 很陌生,我在扩展一个类时遇到了问题。我有这些文件:

用户窗口.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 配置为不查找此文件吗?

谢谢您的帮助。

4

1 回答 1

1

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

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

您可以使用或之一paths的属性为不同的命名空间配置根源目录。LoaderApplication

如果你想阻止 Ext 试图加载这个文件,你必须禁用Loader,然后你必须将所有源文件作为<script>标签包含在 HTML 中。我认为这也将使以后无法编译应用程序的生产版本。

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

简而言之,您不应该再次尝试按照框架的期望工作。尤其是当您考虑到类名和文件系统之间的 1:1 映射是几乎所有 OO 语言中的标准做法时......

于 2013-09-15T10:40:13.517 回答