http://blog.csdn.net/zhangxin09/article/details/5895355
原文:Ext JS 3.3 Calendar Component on September 8, 2010 by Brian Moeskau
对一个成熟的日历控件而言,应该可以很轻松地整合之,或本身就可以视其为一个可产品化的项目。不仅如此,通过观察这个日历控件内部原理,你还将看到实现一个Ext组件是多麽的复杂。因此,通过本例子的Sample,你将看到整合过程中,需要一点特殊的技巧性在内。不过另一方面,却也要尽量简单,去掉实际需求中不需要的内容。为此,我们认为在这次的发布中,针对平衡简单与复杂之间的取舍可以获得一个较好的平衡性,以期待您的认同。
认识CalendarPanel
主要的日历演示程序称作CalendarPanel,是一个大头组件,其下面由各个不同的组件所组成。但是你也可以独立使用其中某些的子控件(如各种calendar子视图)。当然CalendarPanel作为大头控件是最高层次的容器并替大部分视图提供所需的配置项参数。所以初初你常会使用到就是这个CalendarPanel。况且她继承自Panel面版类,所以在她身上可以任意套用一种布局风格。
CalendarPanel的渲染实际是通过不同视图组件其模板依次轮流渲染的结果,当然,也可以説CalendarPanel是一个容器。下面,我们来看看CalendarPanel分别有哪些的组件组成:
- MonthView – 通过MonthViewTemplate模板的视图,没有滚动条并总是自适应CalendarPanel大小的。该视图基於box layout的实现。
- DayView – 该试图下细分了两个子视图:DayHeaerView (通过DayHeaderTemplate渲染) 以及 DayBodyView(通过DayBodyTemplate渲染)。头部视图(The header view)位于视图的顶部,是侦听全天事件的所在;而主题视图(The body view)则是非事件区域,可被滚动的区域。这是两种完全不同的视图类型,有着不同的布局方式和事件处理手段等等的区别,所以必须划分开来。
- WeekView –只是DayView的一天的概念扩展到七天,多次渲染而已。这样,也不必要刻意创建多个模板了。
虽然CalendarPanel自带一直默认的编辑形式EventEditorForm,但这仍是远远不够的,你应该根据需求制定新的编辑形式,例如表单验证规则等的属性,预计会有什麽事件,都依据每一个项目的不同而不同。故所以,如果开发你的程序时,通常首先第一步的就是制定日历编辑形式。
CalendarPanel配置项
CalendarPanel类提供许多的配置项参数。通过这些参数,你可以显示或隐藏默认的视图,显示或隐藏默认导航条,显示或隐藏当前的事件以“今天”代替……。子视图也有许多配置项如 enableFx, enableDD, startDay等等。由於使用CalendarPanel 的时候你不能直接访问视图对象,所以要配置子视图的话就必须通过 xxViewConfig的配置项(这个xx可替换为“day,” “week”或“month”)。例如,在例子test-app.js就有针对月视图的配置项内容:
- monthViewCfg: {
- showHeader: true,
- showWeekLinks: true,
- showWeekNumbers: true
- }
控制事件数据
如果熟悉ExtJS组件的数据绑定方式的话,那么为 CalendarPanel加载数据也不是一件难事。只要创建你想要创建的Ext Store类型,用Ext.calendar.EventRecord 去定义记录加载之,再将这个Store绑定到eventStore的这个配置项,那么 CalendarPanel就会完成好数据绑定,自动侦听Store的事件进而更新或渲染UI,整个过程就是与Ext其他的组件相类似。该控件也支持自定义的数据映射(mapping),以便不能直接套用Ext.calendar.EventRecord 的时候。只要指定 Ext.calendar.EventMappings的哪个属性进行覆盖即可。例如:
- Ext.calendar.EventMappings.Title.mapping = 'my-title'; // 重新定义过id
- Ext.calendar.EventMappings.EndDate.name = 'END'; // 重新映射字段
- Ext.calendar.EventRecord.reconfigure();
整合在一起吧
如果你看过演示程序的代码,你会发现有两处地方都是登记事件的,一个在CalendarPanel本身一个是在编辑形式EventEditorForm。其目的在于保持组件的低耦合性(loosely-coupled)以便尽量可复用。不同的项目有不同的需求,作为演示程序就是要迎合这种多变的特性,告诉开发者是如何链接这些事件以便完成需求的。不同的日历视图会触发许多特定的事件,如CRUD操作、拖放事件、视图变动。从原理上讲,要更简单地控制事件,CalendarPanel采用了Relay事件的方法——如此便能更集中地控制好这些事件。
依然是老生常谈的话题,UI的交互可能通过事件的设计来产生不同实现,即交互方式决定了事件这么些,好比页面顶部的全局信息告示,单击“快速编辑”显示出来一个窗体等等。
下面将为大家呈现UI代码的大体结构,并特意修葺一下,说明怎么把各种组件组合在一起。可以在示例程序的文件夹下的test-app.js找到完整的代码。
- // 设置日历所用的Store数据源
- this.calendarStore = new Ext.data.JsonStore({
- // 输入配置项
- });
- this.eventStore = new Ext.data.JsonStore({
- // 输入配置项
- });
- // 设置UI
- new Ext.Viewport({
- layout: 'border',
- items: [{
- id: 'app-header',
- region: 'north',
- // etc. -- static header area
- },{
- id: 'app-center',
- region: 'center',
- layout: 'border',
- items: [{
- id:'app-west',
- region: 'west',
- // etc. -- sidebar region configs
- },{
- // 开始定义日历控件
- xtype: 'calendarpanel',
- region: 'center',
- // 日历的数据绑定
- eventStore: this.eventStore,
- calendarStore: this.calendarStore,
- // 自定义视图
- monthViewCfg: {
- showWeekLinks: true
- },
- // CalendarPanel-specific configs as
- needed
- showTime: false
- // Set up event listeners -- see the
- sample app code for the full list
- listeners: {
- 'eventclick': {
- fn: function(vw, rec, el){
- // etc.
- },
- scope: this
- },
- 'eventadd': {
- fn: function(cp, rec){
- // etc.
- },
- scope: this
- },
- // etc. -- there are a lot of these
- // These handlers allow the app code
- to coordinate between
- // components and the overall UI so
- that the components
- // don't have to know about each other.
- }
- }]
- }]
- });
还有……
文章开头已经交待,一个日历控件真正所蕴含的功能要比演示程序中演示的多得多、丰富得多。例如循环事件(指非编程中的“事件”)、并行日历、闹钟和自定义视图等等。就作用而言,该示例程序旨在抛砖引玉所用,从中可以让大家去扩展这个日历控件。但是这里卖一下广告,如果您正想寻找一个一步到位的整合包,那么接下来这个高级版的Ext Calendar Pro 便是不错的选择!
相关推荐
Ext JS Calendar 日历是一款强大的日历控件,适用于构建具有丰富功能的日程管理应用。它提供了多种视图,包括月视图、日视图和周视图,允许用户灵活查看和管理时间安排。本文将深入探讨Ext JS Calendar的核心组件、...
EXT JS 4 版本在日期控件方面提供了丰富的功能,使得开发者可以方便地处理日期和时间输入。在这个特定的资源中,我们关注的是一个集成时间选择的日期控件,这在需要精确到时、分、秒的场景下非常有用。 EXT JS 4 的...
在EXT中,日期时间控件是一个非常重要的组件,它允许用户选择日期和时间,常用于各种表单输入或者数据展示。本控件名为"EXT下拉日期时间控件",具有高度可定制性和灵活性,能够满足开发者对日期时间选择的精确需求。...
总之,“不错的日历控件(JavaScript、ext)”是利用JavaScript和EXT JS库创建的一种高效、灵活的日期选择工具。通过EXT的强大功能,开发者可以快速构建出符合用户需求且具有专业级别的日历组件,从而提升Web应用的...
在EXT中,日期时间控件(DateTimeField)是一个非常实用的组件,允许用户选择日期和时间,从而提高用户体验和数据输入的准确性。EXT提供了丰富的UI组件,包括表格、面板、窗口、表单等,而日期时间控件则是表单组件...
EXT日期时间控件2是一款基于EXT JavaScript库的高级UI组件,专为网页应用设计,用于提供用户友好的日期和时间选择功能。EXT是一个强大的前端框架,由Sencha公司开发,广泛应用于构建富互联网应用程序(RIA)。EXT的...
在本文中,我们将深入探讨`ExtJS`框架中的两个关键组件——`Ext日期时间控件`和`Spinner控件`,以及它们在`Grid`中的应用。`ExtJS`是一款强大的JavaScript库,专用于构建富客户端应用程序,尤其适用于创建复杂的、...
1. **EXT4时间控件**:EXTJS4是Sencha公司开发的一个富客户端JavaScript框架,它包含了大量的UI组件,其中时间控件是其一。EXT4的时间控件基于jQuery UI,提供了丰富的样式和功能,可以轻松地与后台数据进行交互。 ...
日历控件和IP地址输入控件是Ext2框架中的两种常见组件,它们分别用于处理日期选择和IP地址输入的功能。 1. **基于Ext2的日历控件**: 日历控件在前端开发中通常用于日期选择,它允许用户通过一个图形化的日历界面...
标题“Ext时间日期选择控件,精确到秒”指出了该控件允许用户选择时间到秒级别,这对于需要精确时间记录的应用场景(如日程安排、定时任务等)非常关键。EXTJS提供了多种时间日期选择控件,如`MyTimeField.js`、`...
本主题聚焦于基于Ext2的日历控件和IP地址输入控件的实现,这是EXTJS库的一个实例,EXTJS是一个强大的JavaScript库,特别适用于创建富客户端应用。 EXTJS 2.2版本是EXTJS的早期版本,尽管现在已经有更新的版本,但...
EXT 4.0 的日期选择控件设计得非常直观,允许用户通过日历视图进行选择,同时提供文本框供用户直接输入。而加入时分秒的功能则使它更加实用,适用于需要精确时间输入的场景,比如预约、会议安排等。 EXT 4.0 的日期...
"ext4.2 日历日期控件,可以选择时分秒"是一个专门针对这个需求的组件,它允许用户在网页应用中方便地选择日期、时间和秒数。这个控件是EXTJS库的一个组成部分,EXTJS是一个基于JavaScript的富客户端应用框架,广泛...
在标题和描述中提到的`Ext`扩展`dateField`时间控件,其主要目的是提供更灵活的日期选择体验。这可能涉及到以下关键功能: 1. **模式切换**:用户可以根据需要在年月日、年月、年和月之间切换选择模式。这通常通过...
在EXT JS这个强大的JavaScript框架中,时间控件是开发者经常使用的元素之一,特别是在构建数据密集型Web应用时。EXT JS的日期控件默认只提供日期选择功能,但往往在实际需求中,我们还需要用户能够选择具体的时间,...
日历控件在各种应用程序中都非常常见,用于显示日期、计划事件或管理时间表。下面将详细探讨ExtCore日历控件的相关知识点。 首先,了解ExtCore的基础至关重要。它是一个轻量级的库,提供了丰富的UI组件和数据绑定...
带动Ext.DateTimePicker设置 * 4,增加时期时间选择器变动时的样式变化功能 * 5,解决GRID中使用时,同列同对象间值影响的问题 * 6,解决原组件,点击today按钮时,无法回到选择器当日界面的问题 */ 另外此控的时分...
DateField是Ext JS中处理日期输入的一种控件,通常允许用户选择完整的日期(年、月、日)。然而,在某些情况下,我们可能只需要用户选择年和月,这就需要对DateField进行定制或扩展。 在给定的资源`monthPick.js`中...
EXT 时间控件通常与日期选择器(DatePicker)一起使用,为用户提供日期和时间的组合选择。在给定的文件中,`date.html` 可能是包含示例代码或展示如何在网页中使用此控件的HTML文件,`ext-all.js` 是EXT框架的全量...