根据Sencha MVC Application Architecture guide中的文件结构部分创建一个新的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 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(以MVC方式使用Ext JS)与URL重写(mod_rewrite)集成也必须是一种非常普遍的做法吗?
任何建议的工作设置/结构都将受到高度赞赏。
目标应该是:
答案 0 :(得分:0)
夫妻俩。
首先 - 您不需要为ExtJs库和加载器中的应用指定绝对路径。
...
appFolder: 'app' // should be enough
...
第二 - 关于构建和生产之间的差异 - 我最终得到了两个.html文件 - index.html和index-dev.html。这些文件不会被更改(一旦你设置它们)所以保持它们同步不是问题。
您可以将index-dev.html用于开发需求,调试以及构建过程。基本上,此文件是为本地开发环境配置的。
index.html只使用app.js的组合和缩小版本并配置用于生产部署。
答案 1 :(得分:0)
使用mod重写,您可以使用Symfony
稍加修改的.htaccess文件<IfModule mod_rewrite.c>
RewriteEngine On
#<IfModule mod_vhost_alias.c>
# RewriteBase /
#</IfModule>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
此文件可以
这应该适用于您的设置,只需将app.php行更改为您的应用程序入口点
即可对于目录设置,你的很好,只有几件事:
您的SDK工具已过时,因为您可以下载: http://www.sencha.com/products/sencha-cmd/download/(v3.0.0)
在http://docs.sencha.com/ext-js/4-1/#!/guide/command的文档之后,您可以获得所需类的“构建”,但最后还是在开发/生产javascript文件之间手动切换,或者使用环境中的环境变量进行切换代码
实际上我认为您可以在构建目录中使用“假”index.html通过构建工具进行修改,然后在生产代码中,您可以模仿sencha构建生成的代码。
答案 2 :(得分:0)
创建index.html文件以生成项目文件将是一种方法。我还发现sencha架构师非常严格且难以使用。最烦人的是我不能使用外部编辑器来编辑生成的代码。一切都必须在设计师中完成,如果设计师能够提供我需要的所有功能,那就很好。但它不能。