在开发和生产中将Ext JS 4.1 MVC应用程序集成到重写URL(mod_rewrite)中

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版本).这是它出错的地方.我采取以下步骤:

  1. 命令行我进入/ wwwroot/myapplication目录.
  2. 我执行sencha create jsb -a http://servername/someidentifier1/someidentifier2 -p myapplication.jsb3生成jsb3文件.
  3. 我执行 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的)必须是一个非常普遍的做法吗?

任何建议的工作设置/结构将受到高度赞赏.

目标应该是:

  • 没有手动编辑jsb3文件.
  • 保持extjs-4.1.1目录位于顶层,以便在应用程序之间共享.
  • 没有app.html文件,因为它从未在服务器端MVC应用程序中使用,否则需要手动更新.
  • 一个很好的额外功能是将app.js的内容放在服务器端生成的HTML中,因为它可以接收动态生成的参数.

sha*_*sha 0

夫妇的事情。

首先 - 您不需要在加载器中指定 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 的组合和缩小版本,并配置为生产部署。