smh*_*mhg 5 extjs extjs4 extjs-mvc extjs4.1
基于Sencha的MVC应用程序架构指南中的文件结构部分创建一个新的Ext JS 4.1.1应用程序我最终得到了这个结构:
/wwwroot
/myapplication
/app
/controller
/view
app.js
/extjs-4.1.1
Run Code Online (Sandbox Code Playgroud)
app.js文件包含:
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
appFolder: '/myapplication/app',
autoCreateViewport: true,
name: 'MyApplication',
controllers: [
...
]
});
Run Code Online (Sandbox Code Playgroud)
一切都很好.然后我将app.js包含在我的服务器端 MVC应用程序中输出(不要与客户端 Ext JS MVC结构混淆).使用的语言和服务器端应用程序的结构对于这个问题并不重要,但输出的结果是.在开发中,应用程序的URL是:
http://servername/someidentifier1/someidentifier2
Run Code Online (Sandbox Code Playgroud)
与许多应用程序一样,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>
Run Code Online (Sandbox Code Playgroud)
Ext JS的是不是在默认的推荐位置,是/wwwroot/myapplication/extjs-4.1.1,而是一个级别,因为它在多个应用程序之间共享.如果您回顾上面的app.js,您还会注意到需要设置的appFolder设置,以便使用"不存在"的URL.
这一切都可以在开发中正常工作,但下一步是使用Sencha SDK Tools生成代码的"构建" (问题基于适用于Windows的2.0.0 Beta 3版本).这是它出错的地方.我采取以下步骤:
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工具更加灵活,并且不建议稍微偏离默认结构.所有接受,但在另一方面:整合的Ext JS 4.x版(Ext JS的在MVC方式)与URL重写(mod_rewrite的)必须是一个非常普遍的做法吗?
任何建议的工作设置/结构将受到高度赞赏.
目标应该是:
夫妇的事情。
首先 - 您不需要在加载器中指定 ExtJs 库和应用程序的绝对路径。
...
appFolder: 'app' // should be enough
...
Run Code Online (Sandbox Code Playgroud)
其次 - 至于构建和生产之间的差异 - 我最终得到了两个 .html 文件 - index.html 和 index-dev.html。这些文件不会更改(一旦设置它们),因此保持它们同步不是问题。
您可以使用index-dev.html 来满足您的开发需求、调试以及构建过程。基本上这个文件是为您的本地开发环境配置的。
index.html 仅使用 app.js 的组合和缩小版本,并配置为生产部署。