Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 在开发和生产中,将Ext JS 4.1 MVC应用程序集成到重写URL(mod_rewrite)中_Extjs_Extjs4_Extjs4.1_Extjs Mvc - Fatal编程技术网

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

Extjs 在开发和生产中,将Ext JS 4.1 MVC应用程序集成到重写URL(mod_rewrite)中,extjs,extjs4,extjs4.1,extjs-mvc,Extjs,Extjs4,Extjs4.1,Extjs Mvc,基于Sencha的I中的文件结构部分创建一个新的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({ app

基于Sencha的I中的文件结构部分创建一个新的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>

我的申请
extjs不是默认的推荐位置,即/wwwroot/myapplication/extjs-4.1.1,而是一个级别,因为它在多个应用程序之间共享。如果您回顾上面的app.js,您还会注意到需要设置appFolder设置,以使其与“不存在”URL一起工作

这一切在开发中都很好,但下一步是使用生成代码的“构建”(问题基于Windows的2.0.0 Beta 3版)。 这就是问题所在。我采取以下步骤:

  • 命令行我进入/wwwroot/myapplication目录
  • 我执行
    sencha创建jsb-ahttp://servername/someidentifier1/someidentifier2 -p myapplication.jsb3
    生成一个jsb3文件
  • 我执行sencha build-p myapplication.jsb3-d。
  • 构建失败。在这种情况下,因为它尝试在路径c:\…\myapplication\myapplication\app\controller中查找控制器等的自定义代码:当前路径+appFolder设置。您可以假设将它运行得更高一级会更好,但是它找不到(共享的)extjs-4.1.1目录

    我想时间会使extjsmvc结构和SDK工具更加灵活,不建议稍微偏离默认结构。所有这些都可以接受,但另一方面:将extjs4.x(extjs以MVC方式)与URL重写(mod_rewrite)集成也必须是一种非常常见的做法

    任何建议的工作设置/结构将不胜感激

    目标应该是:

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

    首先,您不需要在加载程序中为ExtJs库和应用程序指定绝对路径

    ...
    appFolder: 'app' // should be enough
    ...
    
    第二,关于构建和生产之间的差异,我最终得到了两个.html文件——index.html和index-dev.html。这些文件不会被更改(一旦您设置好它们),所以保持它们同步不会有问题

    您可以将index-dev.html用于开发需要、调试以及构建过程。基本上,此文件是为本地开发环境配置的


    index.html只使用app.js的组合和缩小版本,并配置用于生产部署

    使用mod rewrite,您可以使用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>
    
    
    重新启动发动机
    #
    #重写基/
    #
    重写cond%{REQUEST_FILENAME}-F
    重写规则^(.*)$app.php[QSA,L]
    
    这个文件让你

    • 从服务器获取资源,如果它们是真实的文件(css、js、图像等)
    • 如果服务器文件系统上没有匹配项,则将url部分转换为查询参数
    这应该适用于您的设置,只需将app.php行更改为您的应用程序入口点

    对于目录设置,您的很好,只需做几件事:

    • 您的SDK工具已过时,因为您可以下载: (v3.0.0)

    • 在下面的文档中,您可以使用所需的类进行“构建”,但最终还是需要在开发/生产javascript文件之间手动切换,或者在代码中使用环境变量进行切换

    • 实际上,我认为您可以在构建目录中使用一个“假”index.html,由构建工具进行修改,然后在生产代码中,您可以模拟sencha构建生成的代码


    创建index.html文件以生成项目文件将是一种方法。我还发现sencha architect非常严格,很难使用。最烦人的是我不能使用外部编辑器来编辑生成的代码。一切都必须在设计器中完成,如果设计器可以提供我所需的所有功能,这是很好的。但是不行。

    谢谢你的反馈,但是你所说的只适用于独立的Ext Js应用程序。没有与服务器端设置的集成(除了可能的Ajax调用)。但问题是如何集成到输出html(最好是javascript)的服务器端项目中。这类项目通常基于URL重写,这会给您提到的默认设置带来问题。我不明白。您是否通过服务器端代码生成ExtJs代码?您有过URL重写的经验吗?否则可能很难解释。应用程序是通过上面提到的URL访问的,它返回的HTML类似于app.HTML,但包含其他特定于应用程序的标记和内容(例如title标记,但更多)。但这超出了问题的范围。事实上,服务器端MVC应用程序必须能够生成HTML(最好是app.js内容)