extjs创建项目

extjs创建项目

创建项目命令:

sencha generate app --ext MyApp ./myapp  // 默认使用最新版
sencha generate app --ext@6.0.0.640 MyApp ./myapp  // 限定版本创建

运行上面的命令将会创建名为 MyApp 的 Ext JS 应用,应用所有的文件都放在当前目录下名为 myapp 的文件夹。默认创建两套,分别是classic 或者 modern 工具包

生成PC端或者手机端其中一套:

sencha generate app --ext --modern MyApp ./myapp

运行上面的命令将会生成移动端的代码。也可以注释掉app.json里面的代码。

"builds": {
    //这里就很简单了,如果你只想用 classic 那么就注释 modern 的配置即可。
    "classic": {
       "toolkit": "classic",
       "theme": "theme-triton"
    },
    "modern": {
       "toolkit": "modern",
       "theme": "theme-neptune"
    }
}

生成的结构为:

202181611452-image-20210812190656-ngqmn9l.png

应用包含了 model , store , 和 application.js。 你就把 store 看成是一个 model 实例的集合。store 是为你的程序功能提供并加载数据用的,你可以认为 store 就是一个数据源,它支持排序,过滤,分页等等,经常用到 store 的就是 grid 组件

而这个 main.scss 文件是样式文件,在 classic 和 modern 工具包都存在,对应桌面和移动设备的样式。

还有就是在根目录也有一个 sass 文件夹,那里是放置应用所有设备共用的样式。

Model(模型)

这代表着数据层。model 保存的数据可以包含数据验证和逻辑,model 经常用于 store 中。上文已经讲过,store 就是多个 model 的集合。

View(视图)

这一层就是用户界面。包含有 button,form,和 message box 等等组件。

Controller(控制器)

控制器处理 view(视图)相关的逻辑,例如 view 的 event(事件)处理,还有任何程序相关逻辑都可以写在这里。

View model (视图模型)

view model 封装了 view(视图)所需要的展示逻辑,绑定数据到 view 并且每当数据改变时处理更新。

app.js

Ext.application({
	name : 'MyApp',
	extend : 'MyApp.Application',
	requires : [
		'MyApp.view.main.Main'
	],
	mainView : 'MyApp.view.main.Main'
});

在上面代码中,name 定义了程序的名称,extend 表示继承 MyApp.Application 类,这个类文件定义在 app 文件夹下名为 Application.js :

extend: ‘MyApp.Application’

requires 部分指定了这个类需要的类列表。这样在 requires 里面添加的类在当前类中首次实例化时,会去先加载它,你可以把 requires 的作用理解为 java 中的 import ** 关键字。mainView** 指定的是要初始化创建的 view(视图)。

Application.js

Ext.define('MyApp.Application', {  
	extend: 'Ext.app.Application',
	name: 'MyApp',  
	stores: [
		// TODO: add global / shared stores here
	],
	launch: function () {
		// TODO - Launch the application  
	}
});

这里你可以看到 MyApp.Application 继承自Ext.app.Application 。这个 launch 函数是在 **Ext.app.Application ** 类里。这个函数将会在页面加载完成后调用。

这个 stores 是指定需要的 store 的,这里并没有用到,你将在后面的章节中学习到关于 store 的更详细的知识。

视图模型 – MainModel.js

现在看一下 \app\view\main 目录下的 MainModel.js 文件。这个类是 Main 视图的 view model(视图模型)。这个视图模型继承自 Ext.app. ViewModel ,代码如下所示:

Ext.define('MyApp.view.main.MainModel',{
	extend : 'Ext.app.ViewModel',
	alias : 'viewmodel.main',
	data : {
		name : 'MyApp',
		loremIpsum : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
	}
});

控制器 – MainController.js

这个类是 Main 视图的控制器。在下列代码中你可以看到 onItemSelected 函数,这个函数将在视图里的 grid 中选中某一项时触发调用。这是什么原理呢?后面会讲到的。

Ext.define('MyApp.view.main.MainController', {
	extend : 'Ext.app.ViewController',
	alias : 'controller.main',
	onItemSelected : function(sender, record) {
		Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this);
	},
	onConfirm : function(choice) {
		if (choice === 'yes') {
		//
		}
	}
});

我们可以看到 extend 继承了 Ext.app.ViewController 这个类。Ext JS 中有两种类型的控制器: Ext.app.ViewControllerExt.app.Controller

Main.js

如果你用的是 Sencha Cmd 5,,并且你生成应用时执行了使用哪种 toolkits 工具包,是** –modern** 或 –classic ,如果是这样那么 Main.js 文件就在\app\view\main 文件夹下面。但是如果你用 Sencha Cmd 6 生成的是通用的应用,那么将会有两个 Main.js ** 文件,分别在 \modern\src\view\main** 和**\classic\src\view\main** 目录下面。

在查看这两个文件的内容之前,我先通过这两个不同路径的 Main.js 文件来解释一下。在本章的上文中,你已经知道为什么 Ext JS 6 合并了 Ext JS 和 Sencha Touch 为一个框架。这两个框架合并后共用一个核心,剩下的代码则分为两部分 classic 和 modern。传统的 Ext JS 代码移动到 classic 工具包,而 modern 的代码支持触摸和 HTML5 在 modern 工具包。所以这里需要两个工具包,程序会根据访问设备自动使用对应的工具包里的 UI 类(view)。

  • 应用分两个工具包并共享核心资源和逻辑,这称为通用应用。
Ext.define('ComstartTest.view.main.Main', {
    extend: 'Ext.tab.Panel',
    xtype: 'app-main',

    requires: [
        'Ext.MessageBox',

        'ComstartTest.view.main.MainController',
        'ComstartTest.view.main.MainModel',
        'ComstartTest.view.main.List'
    ],

    controller: 'main',
    viewModel: 'main',

    defaults: {
        tab: {
            iconAlign: 'top'
        },
        styleHtmlContent: true
    },

    tabBarPosition: 'bottom',

    items: [
        {
            title: 'Home',
            iconCls: 'x-fa fa-home',
            layout: 'fit',
            // The following grid shares a store with the classic version's grid as well!
            items: [{
                xtype: 'mainlist'
            }]
        },{
            title: 'Users',
            iconCls: 'x-fa fa-user',
            bind: {
                html: '{loremIpsum}'
            }
        },{
            title: 'Groups',
            iconCls: 'x-fa fa-users',
            bind: {
                html: '{loremIpsum}'
            }
        },{
            title: 'Settings',
            iconCls: 'x-fa fa-cog',
            bind: {
                html: '{loremIpsum}'
            }
        }
    ]
});

这个 Main 视图是一个 tab panel,因为它继承了 Ext.tab.Panel 。这个类有属性 controllerviewmodelrequires 配置了需要依赖的类。创建了四个 tab 页(items属性),并且绑定了数据 ViewModel 里的 loremIpsum 属性。你将会在后续章节中了解关于此更多的详细信息。

接着看一下在 *\classic\src\view\main* 下的 Main.js 文件内容:

Ext.define('ComstartTest.view.main.Main', {
    extend: 'Ext.tab.Panel',
    xtype: 'app-main',

    requires: [
        'Ext.plugin.Viewport',
        'Ext.window.MessageBox',

        'ComstartTest.view.main.MainController',
        'ComstartTest.view.main.MainModel',
        'ComstartTest.view.main.List'
    ],

    controller: 'main',
    viewModel: 'main',

    ui: 'navigation',

    tabBarHeaderPosition: 1,
    titleRotation: 0,
    tabRotation: 0,

    header: {
        layout: {
            align: 'stretchmax'
        },
        title: {
            bind: {
                text: '{name}'
            },
            flex: 0
        },
        iconCls: 'fa-th-list'
    },

    tabBar: {
        flex: 1,
        layout: {
            align: 'stretch',
            overflowHandler: 'none'
        }
    },

    responsiveConfig: {
        tall: {
            headerPosition: 'top'
        },
        wide: {
            headerPosition: 'left'
        }
    },

    defaults: {
        bodyPadding: 20,
        tabConfig: {
            plugins: 'responsive',
            responsiveConfig: {
                wide: {
                    iconAlign: 'left',
                    textAlign: 'left'
                },
                tall: {
                    iconAlign: 'top',
                    textAlign: 'center',
                    width: 120
                }
            }
        }
    },

    items: [{
        title: 'Home',
        iconCls: 'fa-home',
        // The following grid shares a store with the classic version's grid as well!
        items: [{
            xtype: 'mainlist'
        }]
    }, {
        title: 'Users',
        iconCls: 'fa-user',
        bind: {
            html: '{loremIpsum}'
        }
    }, {
        title: 'Groups',
        iconCls: 'fa-users',
        bind: {
            html: '{loremIpsum}'
        }
    }, {
        title: 'Settings',
        iconCls: 'fa-cog',
        bind: {
            html: '{loremIpsum}'
        }
    }]
});

上面代码中,items 中的代码几乎和 modern 工具包中的是一样的。此外,这个文件有些配置是专用于支持响应设计的。下列代码告诉框架使用的 **ui ** 组件为 navigation

** ui: ‘navigation’**

在第8章(主题和响应设计)中会介绍关于这个 UI 配置和响应设计的内容。

同样的,如果你打开 classic 或 modern 下的 List.js ,你会发现他们只有很细微的区别。

探索 Sencha Cmd 命令

现在让我们学习 Sencha Cmd 的一些非常有用的命令。

Sencha 命令格式

Sencha 命令采取以下格式:

sencha [category] [command] [options…] [arguments…]

在 Sencha Cmd 中许多命令和可选项。我们看一下都有哪些比较重要的命令。

2021816114551-image-20210812193853-l4e09ia.png

获取一个特定类别的帮助信息,类别名称紧随在 help 后面,例如获取一个类别 app 的帮助信息,运行下列命令:

2021816114634-image-20210812193954-d18nvvy.png

升级 Sencha Cmd

如果你想检查是否有 Sencha Cmd 可用的更新,使用以下命令:

sencha upgrade --check

2021816114653-image-20210812194137-ye7keyq.png

如果你要升级 Sencha Cmd,只需要移除** –check** 选项,如以下代码所示:

sencha upgrade

生成一个应用

Sencha Cmd 支持 Ext JS 4.1.1a 及更高版本和支持 Sencha Touch 2.1 及更高版本。你电脑上可以存在多个版本的 SDK。这是基于 Sencha SDK 生成应用的命令格式,例如 Ext JS 或者 Sencha Touch:

sencha -sdk /path/to/sdk generate app [--modern/classic] MyApp /path/to/myapp

这个示例代码将在目录 /Users/SomeUser/projects/extjs/myapp 下生成名为 MyApp 的 Ext JS 6 应用 :

sencha -sdk /Users/SomeUser/bin/Sencha/Cmd/repo/extract/ext/6.0.0/ generate app MyApp /Users/SomeUser/projects/extjs/myapp

构建应用

运行下列命令将进行构建 HTML,JS,SASS 等等:

sencha app build

使用 Sencha Cmd 6 构建 Ext JS 6 应用,你还可以运行下列命令选择构建 moern 或 classic 风格的应用:

sencha app build modern
sencha app build classic

这里说一下,modernclassic 的构建配置在 app.json 。 默认 Sencha Cmd 运行两个构建配置: classic 和 modern 。如果需要你也可以在 app.json 中添加额外的构建配置。

启动应用

watch 命令用于重新构建并启动应用。这不仅会启动应用程序,还监视任何代码更改,一旦代码改变,浏览器刷新将包括最新的代码:

sencha app watch

在 Sencha Cmd 6 和 Ext JS 6,你也可以运行下列命令选择 modern 或 classic:

sencha app watch modern
sencha app watch classic

代码生成

用Sencha Cmd,你可以生成 Ext JS 代码,例如 view,controller,model:

sencha generate view myApp.MyView
sencha generate model MyModel id:int,fname,lname
sencha generate controller MyController

当你生成 model 时如果不指定字段类型,默认类型是 string。

升级你的应用

Sencha Cmd 升级 SDK 的版本是很容易的。使用这个升级命令将你的程序升级到新框架:

sencha app upgrade [ path-to-new-framework ]  // path-to-new-framework为新的框架的目录

原文地址:https://www.cnblogs.com/qianduanjingying/p/15147324.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我有一个问题,我不知道如何解决.我有一个Indy10HTTP服务器.我在许多应用程序中使用过Indy9和Indy10HTTP服务器,从未遇到任何问题.但现在我使用带有ExtJSjavascriptRAI框架的Indy10HTTP服务器.问题是当我提交包含非ansi字符的数据时.例如,当我提交1250代码页中的字母“č”(
我正在使用sdk1.17开发一个Firefox附加组件.它包含一个带有按钮的面板(使用ExtJs开发),我想在用户单击按钮时拍摄当前页面的屏幕截图.在GoogleChrome中,有一个API(chrome.page-capture)就在那里.但我在Firefox中找不到类似的那个.在firefox中如何从main.js完成此任务.解决方法:哦
Ext.define('PhysicsEvaluationSystemV1.view.base.BaseCharts',{extend:'Ext.panel.Panel',xtype:'basecharts',html:'<divid="main"style="width:600px;height:400px;"></div&
默认所有列(假设列3最大3列,动态显示),使用headerRowsEx中的rowspan实现双表头,第一层表头的width也必须要设置正确。使用"grid.getColumnModel().setHidden"即可实现列的隐藏,也不需要动态设置colspan。{xtype:'filtergrid',id:'grid1',cm:newExt.grid.Colu
序言   1.ExtJs是一套很好的后台框架。现在很流行的,我们要会。    2.这是我写ExtJs的第一篇,以后会写很多直到把这框架运用的炉火纯青,走火入魔。ExtJs中的命名空间      我是做.net的,这命名空间名字一样,功能也一样,都是对项目中类进行有效的管理,区分类
我在ExtJs中有这个表单.如果field1不为空,则field2不能为空.但即使听众正在解雇,它也无法正常工作.{xtype:'panel',title:'title1',items:[{xtype:'fieldset',title:'fieldA',items:[{xtype:'t
我可以将HTML元素(如文本和图像)放在面板标题中,如下所示:vargrid=newExt.grid.GridPanel({region:'center',style:'margin:10px',store:newExt.data.Store({data:myData,reader:myReader}),headerCfg:{tag:
解决方案来至于https://www.sencha.com/forum/showthread.php?471410-Bug-in-VS-Code-Plugin-since-VS-Code-Update-(-gt-1-31)在C:\Users\你的用户名\.vscode\extensions\sencha.vscode-extjs-1.0.1\out\src文件下找到Logger.js,打开它。找到代码fs.writeFile(path.join(Platfo
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>MyJSP'index.jsp'
Ext.isEmpty(str,[allowEmptyString])如果str为nullundefinedazero-lengtharrayazero-lengthstring (UnlesstheallowEmptyStringparameterissettotrue)//意思如果第二个参数设为true,则是允许str对象为空字符串该方法返回true 如果不为上面条件则返回fal
以编程方式关闭ExtJS选项卡的正确方法是什么?我需要在IE6中完成这项工作;虽然从TabPanel删除选项卡有效,但我看到IE警告:此页面包含安全和不安全的项目……当我单击选项卡上的X时,我看不到此警告.所以,当我点击X时,显然会发生一些聪明的事情.注意:当我使用tabPanel.remove(aTab,true
1.链接1.1.零散知识链接https://blog.csdn.net/zhaojianrun/article/details/701410711.2.系统教程http://extjs.org.cn/1.3.视频教程1.4.官方网站 
ExtJS有Ext.each()函数,但是有一个map()也隐藏在某个地方吗?我努力了,但没有找到任何可以填补这个角色的东西.这似乎是一件简单而微不足道的事情,一个像Ext这样庞大的JS库显然必须拥有.或者当Ext真的不包含它时,将它添加到Ext的最佳方法是什么.当然,我可以写:Ext.map=function(
我在一家使用Ext-JS的公司工作.该产品目前过度扩展了Ext-JS组件并覆盖了父功能.这使升级变得困难.我们正在保留Ext-JS,但我们正在考虑以非标准的方式使用它.似乎有两个阵营.在一个阵营中,成员们认为我们应该在Ext-JS之上编写一个抽象,以防我们决定在几年内改变框架,希望这样我们不
我想计算今天和给定日期之间的天数,并检查截至今天剩余的天数或今天过去的天数.vartoday=newDate();vardate_to_reply=newDate('2012-10-15');vartimeinmilisec=today.getTime()-date_to_reply.getTime();console.log(Math.floor(timeinmilisec/(1000*60*
我将JSON格式结果发送回保存$quot符号的客户端.由于某些未知原因,代码中断了.这是来自ext-all-debug的代码:doDecode=function(json){returneval("("+json+")");FAILSHERE},这是我的JSON,因为它离开了服务器(据我所知,我希望服务器没有花时间解码这个&quot的
我创建了Ext.Window,里面有一些Ext.form字段.但是当我调整窗口窗体时,元素仍然具有初始宽度和高度.是否需要在窗口大小调整时显式调整表单字段的大小?或者有一些选项可以自动调整表单字段的大小?示例代码:varf_1=newExt.form.TextField({fieldLabel:'Label1'});varf_2=n
我有一个简单的案例,我有一个附加商店的网格.有2个按钮.一个带有修改所选记录的处理程序.一个具有提交所选记录的处理程序.当我选择一个记录并推送编辑时–>编辑发生选择(看起来丢失)如果你调用grid.geSelectionModel().getSelection()你会看到记录仍然被选中.它只是没有这样显
我有这种ajax代码重复了很多地方.如何将其重构为单个方法,以便在成功或失败时仍允许不同的行为.Ext.Ajax.request({url:'ajax.php',params:{action:'getDate'},method:'GET',success:function(result,request){Ext.MessageBox.alert(
Ext.define('JsApp.com.Util',{  /**   *显示新建视图   *title:新建界面显示的标题   *xtype:新建界面的别名   */  showCreatingView:function(title,xtype){    this.shrink.formType='create';    this.shrink