根据 Sencha 的MVC 应用程序架构指南中的文件结构部分创建一个新的 Ext JS 4.1.1 应用程序我最终得到了这个结构:
/wwwroot
/myapplication
/app
/controller
/view
app.js
/extjs-4.1.1
app.js 文件包含:
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
appFolder: '/myapplication/app',
autoCreateViewport: true,
name: 'MyApplication',
controllers: [
...
]
});
一切都好。然后我将 app.js 包含在我的服务器端MVC 应用程序中输出(不要与客户端Ext JS MVC 结构混淆)。服务器端应用程序使用的语言和结构对于这个问题并不重要,但输出的结果才是。在开发中,应用程序的 URL 为:
http://servername/someidentifier1/someidentifier2
与许多应用程序一样,mod_rewrite 用于赋予标识符以意义并将 URL 映射到服务器端代码。这些标识符不映射到“物理”目录。这个 URL 的输出是:
<!DOCTYPE html>
<html>
<head>
<title>MyApplication</title>
<link href="/extjs-4.1.1/resources/css/ext-all-debug.css" media="screen" rel="stylesheet" type="text/css" >
<script type="text/javascript" src="/extjs-4.1.1/ext-debug.js"></script>
<script type="text/javascript" src="/myapplication/app.js"></script>
</head>
<body>
</body>
</html>
Ext JS 不在默认推荐位置,即 /wwwroot/myapplication/extjs-4.1.1,而是上一级,因为它在多个应用程序之间共享。如果您回头查看上面的 app.js,您还会注意到需要设置 appFolder 设置才能使其与“不存在”的 URL 一起使用。
这一切在开发中都可以正常工作,但下一步是使用Sencha SDK 工具生成代码的“构建” (问题基于 Windows 的 2.0.0 Beta 3 版本)。这就是它出错的地方。我采取以下步骤:
- 命令行我进入 /wwwroot/myapplication 目录。
- 我执行
sencha create jsb -a http://servername/someidentifier1/someidentifier2 -p myapplication.jsb3
生成一个 jsb3 文件。 - 我执行
sencha build -p myapplication.jsb3 -d .
构建失败。在这种情况下,因为它试图在路径 c:\...\myapplication\myapplication\app\controller 中找到例如控制器的自定义代码:当前路径 + appFolder 设置。您会假设运行它更高一级会更好,但是它找不到(共享)extjs-4.1.1 目录。
我猜想时间会让 Ext JS MVC 结构和 SDK Tools 更加灵活,不推荐稍微偏离默认结构。都可以接受,但另一方面:将 Ext JS 4.x(以 MVC 方式的 Ext JS)与 URL 重写(mod_rewrite)集成也必须是一种非常普遍的做法吗?
任何建议的工作设置/结构都将受到高度赞赏。
目标应该是:
- 无需手动编辑 jsb3 文件。
- 将 extjs-4.1.1 目录保持在顶层以在应用程序之间共享。
- 没有 app.html 文件,因为它从未在服务器端 MVC 应用程序中使用,否则需要手动更新。
- 一个不错的附加功能是将 app.js 的内容包含在服务器端生成的 HTML 中,因为这样它就能够接收动态生成的参数。