Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Extjs MVC架构 (官方文档翻译)【带源码】

Extjs MVC架构 (官方文档翻译)【带源码】

作者头像
明明如月学长
发布于 2021-08-27 07:33:27
发布于 2021-08-27 07:33:27
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

原文地址:http://docs.sencha.com/extjs/4.2.5/#!/guide/application_architecture

【翻译 by 明明如月 QQ 605283073  源码在文章最后】

如果有一定的英文功底,并且从事编程相关工作或者在校大学生 感兴趣一起翻译此类文章的可以加群

一起翻译一些文章或者api

下一篇:Ext JS 4 架构你的应用 第1节 (官方文档翻译)

大型客户端应用经常比较难写、难组织、难维护。

当你添加更多的函数(功能)和开发人员时它们容易失去控制。

 Ext JS 4 带来了新的应用架构,不仅能够帮助组织你的代码同时也能够减少代码量。

我们的应用架构遵循MVC模式。有很多MVC架构,它们之间也彼此有少许区别。

这里我们定义我们自己的mvc架构:

Model(模型):  是一个属性及其数据的集合(例如 User 模型 会含有 username password属性)。

Model 知道怎样在数据包中保持自己,通过关联也可以链接到其他模型。

View (视图):任意类型的组件如grids, trees 和 panels 都是视图。

Controller(控制器):是使你应用工作的特殊的逻辑文件。

不管是渲染视图、实例化模型或者任何其他应用逻辑。

本指导文件中将展示创建来管理用户数据的简单应用。结束以后你将了解怎样使用Ext JS4应用架构将简单的应用组合起来。

此应用架构尽可能多的提供结构和类和框架代码的一致性。遵循以下惯例将带来很多好处:

(1)每个应用工作原理都是一样的,因此你只需要学一次。

(2)不同app间共享代码比较容易,因为他们工作方式相同。

(3)你也可以使用我们的 构建工具来创建你产品应用的优化版本。

文件结构

Ext JS 4 应用遵循一个统一的目录结构,每个app都一样。

在MVC布局中所有的类都放在app/ 目录下,里面包含子文件夹对应你 模型、视图、控制器和存储的命名空间。

下面是简单的应用文件夹结构的示例:

在本例中,我们将整个应用封装在 'account_manager' 文件夹中。

Ext JS 4 SDK 的基本文件包装在ext-4/文件夹下。

其中index.html的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Account Manager

在 app.js中创建一个应用

每一个Ext JS4应用都通过实例化一个 Application类来启动。

 Application中包含对应用的全局的设置(例如app的名称)以及应用中使用到的模型、视图和控制器的引用。

同时也包含启动方法,当一切都加载完毕后自动运行。

我们创建一个简单的Account Manager app(账户管理应用)帮助我们管理用户账户。

首先要为应用起一个名字。所有的Ext JS 4应用程序应该只使用一个单独的全局变量设置,

将所有的应用类嵌入到里面。

通常来说我们倾向于短的全局变量,我们这里用的是“AM”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.application({
    requires: ['Ext.container.Viewport'],
    name: 'AM',

    appFolder: 'app',

    launch: function() {
        Ext.create('Ext.container.Viewport', {
            layout: 'fit',
            items: [
                {
                    xtype: 'panel',
                    title: 'Users',
                    html : '将在这里显示用户列表'
                }
            ]
        });
    }
});

执行过程:首先我们调用Ext.application 来创建一个Application类的实例,并命名为“AM”。

这样就自动为我们设置了一个全局变量 AM并且 通过 appFolder的配置项  'app' 注册命名空间到 Ext.Loader

我们也提供了一个启动方法,仅仅是创建了一个 包含单个填充全屏的Panel的Viewport

定义一个Controller(控制器)

控制器是绑定一个应用在一起的粘合剂。它主要是监听事件(通常是来自视图的)和做出某些行为。

配置我们的Account Manage 应用,我们创建一个控制器。

创建一个app/controller/Users.js 文件然后添加如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  init: function() {
        console.log('初始化 Users! 此方法将在 Application launch 方法调用前调用');
    }

});

代码语言:javascript
代码运行次数:0
运行
复制

然后添加新创建的 Users 控制器到app.js中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.application({
    ...

    controllers: [
        'Users'
    ],

    ...
});

当我们在浏览器中访问index.html 的时候,Users 控制器将自动加载。(因为在app.js里面我们指定了该控制器)

init方法将在Application的 launch 方法之前调用。

init方法是设置你的控制器和视图相互作用的主要场所,经常用来和其他Controller 方法 - control相结合。

control 方法比较容易监听来自你定义的视图的时间并通过一个处理方法进行处理。

我们更新Users 控制器来实现 panel渲染完成后在控制台显示渲染完成的消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',

    init: function() {
        this.control({
            'viewport > panel': {
                render: this.onPanelRendered
            }
        });
    },

    onPanelRendered: function() {
        console.log('面板已经被渲染完毕');
    }
});

我们修改了init方法使用 this.control 来设置我们应用中视图的监听器。

control 方法使用新的 ComponentQuery(组件查询) 引擎,快速和容易的获取页面组件的引用。

如果你对其不熟悉可以参考 ComponentQuery documentation。 它允许我们使用类似css选择器那样的方式

来找到页面中每个匹配的元素。

'viewport > panel' 意思是“帮我找到Viewport直接子节点的所有Panel ”。

我们提供一个对象映射事件名称(本例中仅仅是render)到处理方法。

运行效果如下:

虽然上面显示的并不是最令人兴奋的应用,但是它为我们展示了代码组织多么的容易。

下面我们将添加一个grid。

定义一个 View(视图)

到目前为止我们的应用仅包含两个文件app.js 和 app/controller/Users.js

我们想要添加一个grid来显示我们系统的所有用户。我们需要更好的组织我们的逻辑和使用视图。

视图只不过是一个Component(组件),经常定义为Ext JS component的子类。

我们将创建一个 app/view/user/List.js文件,来创建Users grid:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.view.user.List' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.userlist',


    title: '所有用户',


    initComponent: function() {
        this.store = {
            fields: ['name', 'email'],
            data  : [
                {name: '刘邦',    email: 'ed@sencha.com'},
                {name: '徐文长', email: 'tommy@sencha.com'}
            ]
        };


        this.columns = [
            {header: '姓名',  dataIndex: 'name',  flex: 1},
            {header: '邮箱', dataIndex: 'email', flex: 1}
        ];


        this.callParent(arguments);
    }
});

 View 类仅仅是一个普通的类。

在此类中我们拓展了Grid 组件设置了alias (别名)以便能够通过xtype方式使用它。

我们也通过store配置了数据和grid需要渲染的列。

下一步我们需要在 Users 控制器中添加视图。因为我们在别名中指定了'widget.'的方式。

我们就可以用 'userlist'作为xtype了,这就像之前的‘panel’一样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',

    views: [
        'user.List'
    ],

    init: ...

    onPanelRendered: ...
});

通过修改app.js在 viewport内部 渲染它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.application({
    ...

    launch: function() {
        Ext.create('Ext.container.Viewport', {
            layout: 'fit',
            items: {
                xtype: 'userlist'
            }
        });
    }
});

这里需要注意的是views 数组里面的'user.List'.

这告诉应用自动的加载此视图,因此我们在启动时能够使用它。

此应用使用了Ext JS 4的新的动态加载系统来动态的从服务器端拉去此文件。

下面是效果:

控制grid

注意到onPanelRendered 仍然被调用了。因为grid类仍然也匹配'viewport > panel' 选择器。原因是

我们的类拓展自Grid,Grid又拓展自Panel.

接下来我们修改User控制器来实现rows(行)的双击事件,以便将来我们实现双击编辑User。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',

    views: [
        'user.List'
    ],

    init: function() {
        this.control({
            'userlist': {
                itemdblclick: this.editUser
            }
        });
    },

    editUser: function(grid, record) {
        console.log('双击了' + record.get('name')');
    }
});

注意 我们将  ComponentQuery选择器 (简单的写为 'userlist')事件名('itemdblclick')并且将处理方法命名为'editUser'。

接下来我们双击第一行。

虽然在控制台正确输出了  双击的那行的姓名,但是我们是想真实地进行修改。

我们现在就行动,创建新的视图 app/view/user/Edit.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.view.user.Edit', {
    extend: 'Ext.window.Window',
    alias: 'widget.useredit',

    title: '编辑用户',
    layout: 'fit',
    autoShow: true,

    initComponent: function() {
        this.items = [
            {
                xtype: 'form',
                items: [
                    {
                        xtype: 'textfield',
                        name : 'name',
                        fieldLabel: '姓名'
                    },
                    {
                        xtype: 'textfield',
                        name : 'email',
                        fieldLabel: '邮箱'
                    }
                ]
            }
        ];

        this.buttons = [
            {
                text: '保存',
                action: 'save'
            },
            {
                text: '取消',
                scope: this,
                handler: this.close
            }
        ];

        this.callParent(arguments);
    }
});

同样地,我们只定义了 Ext.window.Window 的一个子类 。

我们也用initComponent 来指定 items 和 buttons。

我们采用'fit'  布局和form 作为唯一的元素,包含了用户名和邮箱地址的编辑框。

最后创建了两个按钮,一个是关闭窗口一个是用来保存修改的值。

现在需要做的就是将此视图添加到控制器中,渲染并且将User 加载进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',

    views: [
        'user.List',
        'user.Edit'
    ],

    init: ...

    editUser: function(grid, record) {
        var view = Ext.widget('useredit');

        view.down('form').loadRecord(record);
    }
});

首先,我们通过传统的Ext.widget 方法得到了视图,等价于Ext.create('widget.useredit')

然后我们使用 ComponentQuery快速的获得了 编辑窗口的form的引用。Ext JS 4 的每一个组件都有down方法,接受一个ComponentQuery选择器来快速地找到子组件。

双击一行我们看到如下效果:

创建一个 Model(模型)和一个Store(存储)

现在我们有了编辑表单,几乎可以开始编辑我们的用户信息并保存修改后的信息。在我们开始之前,我们应该对我们的代码进行些许地重构。

 此时 AM.view.user.List组件创建一个内联的Store。虽然以前那种方式也不错。但是我们希望单独再应用中来

写,以便以后在里面修改数据。

我们将store放在单独的一个文件中app/store/Users.js

接下来作两个改动:

第一个我们在Users控制器中需要包含这个Store:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
    stores: [
        'Users'
    ],
    ...
});

然后修改app/view/user/List.js 仅仅简单地引用Store的id即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.view.user.List' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.userlist',
    title: 'All Users',

    // we no longer define the Users store in the `initComponent` method
    store: 'Users',

    initComponent: function() {

        this.columns = [
        ...
});

添加了这个store我们的Users控制器将会自动将其载入到页面并给予一个storeId,使得在视图中引用非常方便(仅仅简单的配置store: 'Users')。

此时我们只是在store中内联地定义了我们的属性 ('name'和 'email')。虽然这样也可以很好地工作。但是在Ext JS 4中我们有一个强大的Ext.data.Model类,我们希望用它来编辑用户。我们通过Medole来重构Store:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.model.User', {
    extend: 'Ext.data.Model',
    fields: ['name', 'email']
});

上面就是定义我们Model的方法。我们只需要简单修改Store来引用Model名称取代提供内联属性即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.store.Users', {
    extend: 'Ext.data.Store',
    model: 'AM.model.User',

    data: [
           {name: '刘邦',    email: 'ed@sencha.com'},
        {name: '徐文长', email: 'tommy@sencha.com'}
    ]
});

我们也要求Users控制器获取User 模型的引用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
    stores: ['Users'],
    models: ['User'],
    ...
});

我们的重构是的下一节更加容易,但是没有改变应用的行为。

如果我们重新加载页面然后双击一行,我们可以看到编辑的用户窗体仍然和期待的一样显示了出来。

是时候修改编辑方法了。

通过 Model来保存数据

既然我们已经可以通过users grid来加载数据和通过双击每一行来打开编辑窗体,我们希望能够保存用户修改的值。

编辑用户窗体含有一个保存按钮。第一步我们修改控制器的init方法来简单保存按钮事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.controller.Users', {
    ...
    init: function() {
        this.control({
            'viewport > userlist': {
                itemdblclick: this.editUser
            },
            'useredit button[action=save]': {
                click: this.updateUser
            }
        });
    },
    ...
    updateUser: function(button) {
        console.log('点击了保存按钮');
    }
    ...
});

我们在this.control 里面添加了第二个ComponentQuery(组件查询)选择器-'useredit button[action=save]'。

和第一个选择器工作原理是一样的-'useredit' xtype 在用户编辑窗体里面定义过的。查询窗体中所有带有‘save’动作(action)的按钮。

因为我们在编辑用户窗体里面的保存按钮里写了 {action: 'save'} ,这样就使得为该按钮添加事件比较容易。

我们单击 保存按钮时  updateUser方法被调用了:

既然我们的处理方法已经在保存按钮时得到了调用,我们就为updateUser方法添加真正的逻辑。

在此方法中,我们需要获取form的数据并以此来更新用户数据将其保存到Users store中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
updateUser: function(button) {
    var win    = button.up('window'),
        form   = win.down('form'),
        record = form.getRecord(),
        values = form.getValues();

    record.set(values);
    win.close();
}

我们修改 “刘邦”的邮箱后点击“保存”查看效果:

保存到服务器

上面非常容易。现在我们要和服务端进行交互。现在我们编辑了两个用户记录到User Store中。

我们通过Ajax来读取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ext.define('AM.store.Users', {
    extend: 'Ext.data.Store',
    model: 'AM.model.User',
    autoLoad: true,

    proxy: {
        type: 'ajax',
        url: 'data/users.json',
        reader: {
            type: 'json',
            root: 'users',
            successProperty: 'success'
        }
    }
});

我们移除了'data'属性起而代之的是一个 Proxy。 在 Ext JS 4中proxy(代理)是从Store或者一个Model中加载或者保存数据的一种方式。

有 针对AJAX, JSON-P 和 HTML5 localStorage 的代理。

我们只是简单实用了 AJAX  代理。

我们通过 'data/users.json' url来加载数据。

我们也为Proxy添加了Reader 。采用 JSON Reader,指定了root和successProperty的配置。

最后我们创建data/users.json文件并将以前的数据粘贴进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "success": true,
  "users": [
    {"id": 1, "name": '刘邦',    "email": "liubang@sencha.com"},
    {"id": 2, "name": '徐文长', "email": "tommy@sencha.com"}
  ]
}

唯一的改变就是autoLoad设置为true,就意味着Store将要求Proxy 直接加载数据。如果我们数显页面,

我们将看到和以前同样的输出,不同点是我们不再是在应用中硬编码数据。

我们需要做的最后的一件事就是将变化保存回服务器。在本例中我们使用服务端静态的JSON文件,因此看不到任何数据库的改动。修改proxy 添加 update的url

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proxy: {
    type: 'ajax',
    api: {
        read: 'data/users.json',
        update: 'data/updateUsers.json'
    },
    reader: {
        type: 'json',
        root: 'users',
        successProperty: 'success'
    }
}

我们依然是从users.json中读取数据,所有的数据变更都将发送到updateUsers.json.

更新一个记录以后updateUsers.json文件仅仅包含{"success": true}.由于通过HTTP POST来实现更新,你也许需要创建一个空的文件

避免接收到404错误。updateUsers.json 文件只是一个占位文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
updateUser: function(button) {
    var win    = button.up('window'),
        form   = win.down('form'),
        record = form.getRecord(),
        values = form.getValues();

    record.set(values);
    win.close();
   // 编辑完记录以后同步store
    this.getUsersStore().sync();
}

现在就可以运行完整的例子了。我们编辑一行,点击“保存”按钮,可以看到请求正确发送给了updateUser.json

源码下载地址:https://yunpan.cn/cSFA5huRp8kp8  访问密码 54b3

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/05/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[翻译]Ext JS 教程-MVC架构 原
大规模的客户端应用程序常常难于去编写、组织机构和维护。随着你加入更多的功能,并且投入更多的开发人员,它们渐渐趋向于失去控制。ExtJS 4 带来了一种新的不仅仅能规整你的代码组织结构,而且能限制你要编写的代码数量的应用程序架构。
LeoXu
2018/08/15
3.6K0
[翻译]Ext JS 教程-MVC架构
                                                                            原
Ext JS 4 架构你的应用 第2节 (官方文档翻译)
原文地址:http://docs.sencha.com/extjs/4.0.7/#!/guide/mvc_pt2
明明如月学长
2021/08/27
8070
Extjs mvc
MVC的模式,模型(Models)和控制器(Controllers) Model模型 是字段和它们的数据的集合,例如User模型带有username和password字段,模型知道如何持久化自己的数据,并且可以和其他模型关联,模型跟ExtJS 3 中的Record类有点像(区别是,Record只是单纯的扁平结构,而Model可以nest),通常都用在Store中去展示grid和其他组件的数据 View视图 是组件的一种,专注于界面展示 - grid, tree, panel 都是view Controlle
用户1197315
2018/01/22
2.8K0
Extjs mvc
ExtJs九(ExtJs Mvc用户管理之一)
首先要做的是为用户信息创建一个模型,在Scripts\app\model目录下创建一个名为User.js的文件,然后添加以下模型定义代码:
aehyok
2018/09/11
5.1K0
ExtJs九(ExtJs Mvc用户管理之一)
ExtJs八(ExtJs Mvc创建ViewPort续)
现在要考虑的是如何加载标签页内的内容。虽然标签页默认是延迟渲染的(deferredRender值默认为true),但是它会预加载所有的类,因而当类文件很多的时候,加载时间就是一大问题了。这个,也可通过SDK打包的方式解决,不过在设计阶段还是要考虑的。另一种好的解决方法是,只使用标签页的标签,而不使用其主体加载内容,另外使用一个容器,内部使用CardLayout作为布局.
aehyok
2018/09/11
4.3K0
ExtJs八(ExtJs Mvc创建ViewPort续)
Ext JS4 架构你的应用 第3节 (官方文档翻译)
原文地址:http://docs.sencha.com/extjs/4.0.7/#!/guide/mvc_pt2
明明如月学长
2021/08/27
7260
extjs 基础部分
创建对象的方法:     使用new 关键字创建对象。       new  classname ([config])     使用Ext.create方法创建。       Ext.create(classname,[config])     new Ext.Viewport({})     修改为Ext.create('Ext.Viewport',{})   Ext.widget 或Ext.createWidget 创建对象     使用Ext.ns 或者Ext.namespace  定义命名
用户1197315
2018/01/22
5.7K0
[翻译]Ext JS 教程-ExtJS 4中的数据包(Package)
数据包(data package)是用来加载和保存你应用程序中的数据的东西,包含41个类,但是其中有三个类比所有其他类更加重要——Model,Store和Ext.data.proxy.Proxy。这些类被几乎所有的应用程序用到了,并且受到了许多其他卫星类(satellite class)的支持。
LeoXu
2018/08/15
1.3K0
Extjs 在项目中碰到问题
1.切换tabpanel,新建tab关闭后再新建报错,在火狐下报错 TypeError: el is null el.addCls.apply(el, arguments); 这个我在下一篇文章中已经解决了,请参考。 2.Extjs调试小技巧:可以在代码中加入 console.log(tab222, "2222"); 这样就可以在浏览器中查看你要查看的变量的详细信息 在火狐或者谷歌中德控制台中 3.怎么使用Extjs rest方式 Ext.define('EITruck.store.U
hbbliyong
2018/03/05
6030
ExtJs十(ExtJs Mvc用户管理之二)
为了防止意外情况,这里添加了try模块,在错误的时候会将错误信息作为Msg关键字的值返回。
aehyok
2018/09/11
7K0
ExtJs十(ExtJs Mvc用户管理之二)
Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
做后台管理系统时遇到的问题,关于tab关闭后再打开不显示,或者报错 我在新的tabpanel中加入了一个grid,当我关闭再次打开就会报错Cannot read property 'addCls' of null, 原因是我在定义grid的错误 这是错误代码: Ext.define('HT.view.Grid',{       extend:'Ext.grid.Panel',       title : '人员列表',       width:400,       height:170,       
hbbliyong
2018/03/05
9720
ExtJs十一(ExtJs Mvc图片管理之一)
图片管理要在两个地方使用:一是标签页内的图片管理,一是文章内容编辑时嵌套到插入图片的窗口内。因而,将图片管理做成一个扩展比较方便。当然,做成MVC模式也行,不争论,不讨论。
aehyok
2018/09/11
3.7K0
ExtJs二(实现登录)
  在上一次http://www.cnblogs.com/aehyok/archive/2013/04/17/3025957.html主要是搭建Ext环境,本次课程主要是通过Ext组件来实现登录。
aehyok
2018/09/11
2.3K0
ExtJs二(实现登录)
ExtJs七(ExtJs Mvc创建ViewPort)
在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的。而在4.1.1,则可直接调用application方法开始执行应用程序,简化了。调用application方法,其参数是一个配置对象,主要配置项有以下三个: name:用来定义应用程序的名称,在这里是ExtMVCOne。 appFolder:应用程序的路径,这里是scripts/app autoCreateViewport:默认值为false,在这里要设置为true,让它自动加载\Script\app\View目录下的Viewport.js文件。因为目录已经在Loader中配置好了,因而不用设置目录。
aehyok
2018/09/11
9K0
ExtJs七(ExtJs Mvc创建ViewPort)
[翻译]Ext JS 教程-组件 原
一个ExtJS 应用程序是由一个或者更多个叫做组件的窗口小部件组成的。所有的组件都是Ext.Component类的子类,它允许它们参与到自动的生命周期管理中去,包括实例化、渲染、设置尺寸和位置、还有去实例化。ExtJS提供了大范围的实用组件,而且任何组件都可以很容易的被扩展,去创建一个定制的组件。
LeoXu
2018/08/15
3.5K0
[翻译]Ext JS 教程-组件
                                                                            原
extjs_03_grid(添加数据)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117265.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
5280
extjs_03_grid(添加数据)
Extjs4.2+webAPI+EF实现分页以及webapi的数据传值
由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下 1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado。net实体数据模型 2.就是后台数据也就是apiController,前台需要两个数据,一个是数据的总条数,第二个是要查询的分页数据 所以我们要建立一个实体,用于返回数据传送,由于多个页面都使用,多以用到了泛型。代码如下: public class PageData<T> { //数据总数 public
hbbliyong
2018/03/05
1.1K0
Extjs4.2+webAPI+EF实现分页以及webapi的数据传值
对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化
     对于Ext.data.Store 一直不是很了解,不知道他到底是干嘛的有哪些用处,在实际开发中也由于不了解也走了不少弯路, store是一个为Ext器件提供record对象的存储容器,行为和属性都很象数据表.   由于刚学不是太懂,都是比葫芦画瓢,东搬西畴的去完成功能.程序思路都是自己想象的,对于rest方式的增删改查全是采用另外一种方式去实现的,最后研究发现其实,store都 已经有了这些函数,根本不用自己去实现.下面看下以前所写的代码:这是model,store ,gridpanel var
hbbliyong
2018/03/05
1.9K0
产品前端重构(TypeScript、MVC框架设计)
最近两周完成了对公司某一产品的前端重构,本文记录重构的主要思路及相关的设计内容。 公司期望把某一管理类信息系统从项目代码中抽取、重构为一个可复用的产品。该系统的前端是基于 ExtJs 5 进行构造的,
用户1172223
2018/01/29
1.9K0
产品前端重构(TypeScript、MVC框架设计)
sencha touch结合phonegap开发android下的文件浏览器
大家好,今天我给大家介绍一下通过两个新的html5技术sencha touch 和phonegap来开发android应用。 首先,众所周知,sencha touch是结合了extjs和jquery mobile这两个javascript神器而开发的一个js库,其诞生的目的就是为了使webapp成为nativeapp,甚至使其更像nativeapp,通过html5,javascript,css能够大大地缩短开发移动应用的周期,而且html的灵活性和绚丽是java和object-c所不能媲美的。 然而,想让h
forrestlin
2018/05/23
1.1K0
相关推荐
[翻译]Ext JS 教程-MVC架构 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验