用于多页面应用的ExtJS架构

时间:2013-03-05 19:16:18

标签: model-view-controller extjs architecture extjs-mvc

我有一个.NET应用程序,其中大部分UI都是自定义的。在某些页面上,我使用ExtJS4组件(例如Grid)来显示用户表格。我还有另一个显示用户配置文件的页面,以及另一个显示应用程序表单的页面。还有许多其他页面不使用ExtJS。我谨慎地使用ExtJS组件,并希望在我使用ExtJS的所有页面上为商店和模型提供可重用的代码。

我熟悉ExtJS MVC架构,但所有文档和示例都演示了单页ExtJS应用程序的最佳实践。

对于我的场景,我一直在寻找有关构建ExtJS代码的最佳方法的建议。

我是否应该在常见的JavaScript文件中创建商店和模型,并在每个页面上包含该文件?然后为我想使用ExtJS组件的每个页面创建一个Ext.Application或Ext.onReady实例?或者我应该为几个组件使用MVC架构来处理每个页面?

我只是想避免复制/粘贴代码并具有可重用性。请推荐最佳路径。

3 个答案:

答案 0 :(得分:3)

我必须创建一个包含几个不是ExtJS组件的页面的应用程序。对我而言,它大约是50/50,所以比你的更多的ExtJS。当我尝试时,由于视口与视图绑定的方式,Ext.Application的多个实例无法工作。

我最终使用一个Ext.Application和一个视口(这对调整大小管理很好),我为其他(非ExtJS)页面创建了一个“代理”Ext.panel.Panel视图,我转储了内容当使用servlet渲染时,该页面的html配置中的页面 - 我不想使用IFrame,但我认为这可能是另一种选择。

这对我很好,我能够利用像这样的MVC架构。

答案 1 :(得分:2)

所以我找到了一个合适的解决方案,我相信效果很好。

在我的页面模板上,我加载了Ext JS所需的文件,并使用Loader.setConfig指定ExtJS MVC文件夹结构的位置:

<link href="<path>/ext-all.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="<path>/bootstrap.js" charset="utf-8"></script>
<script type="text/javascript">
    Ext.Loader.setConfig({
        enabled: true,
        paths: {
            'GS': '<path>/extjs/app") %>'
        }
    });
</script>

然后在我的app文件夹中,我有以下文件夹结构:

app/
   Models/
        User.js
        MyOtherModel.js

我的User.js文件包含:

    Ext.define('GS.Model.SimpleUser', {
       extend: 'Ext.data.Model',
       fields: [
           { name: 'UserID', type: 'int' },
           { name: 'Username', type: 'string' },
           { name: 'Firstname', type: 'string' },
           { name: 'Lastname', type: 'string' },
           { name: 'Email', type: 'string' }
       ],
       idProperty: 'UserID'
    });

然后,在我使用ExtJS的每个页面上,我只是通过Ext.requires包含模型:

    Ext.require([
      'Ext.grid.*',
      'Ext.data.*',
      'Ext.util.*',
      'Ext.state.*',
      'Ext.toolbar.Paging',
      'Ext.tip.QuickTipManager',
      'GS.Model.SimpleUser'
    ]);

    Ext.onReady(function () {
        //app code here
    });  

使用这种方法,我可以编写可重用的代码,例如模型和控制器,而不必使用单个视口进行完整的MVC。

答案 2 :(得分:1)

最新版本的Sencha Cmd明确支持multi-page application开发和部署。如果您的依赖项已正确设置,则允许您创建特定于页面的构建包以优化每页的加载和缓存。虽然从实际的角度来看,如果重叠代码的数量足够大(和/或代码的总量足够小),KISS可能会更好,只需将所有应用类包含在一个文件中。

是的,使用Ext的每个页面通常应使用包装应用程序代码的Ext.onReady或Ext.application。您是否遵循MVC模式取决于您,应该由您的应用程序的要求和复杂性驱动。对于简单的情况,它通常是不值得的,但对于复杂的应用程序或团队开发,跟随MVC可能是有意义的。