国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Ext JS 4實現(xiàn)帶week(星期)的日期選擇控件(實戰(zhàn)一)

2024-05-06 15:50:55
字體:
供稿:網(wǎng)友
有一些日期選擇的需求是要看到星期,就是日期中的哪一天是這一年的第幾周,遺憾的是Ext js 并沒有提供這樣的配置,下面為大家分享下理想的解決方法

前言

Ext JS 3 和 Ext JS 4中都有提供日期選擇的組件(當然早期版本也有)。

Ext JS 4實現(xiàn)帶week(星期)的日期選擇控件(實戰(zhàn)一)

 

但是有一些日期選擇的需求是要看到星期,就是日期中的哪一天是這一年的第幾周。

遺憾的是Ext js 并沒有提供這樣的配置。

(針對Ext js 4來說,理想的相法是在Ext.picker.Date有一個 類似showWeek這樣的配置項)

現(xiàn)有的解法

到網(wǎng)絡(luò)上去看看基于Ext js 的解法:有找到兩個







第一種解法在IE上work, 在其他瀏覽器上顯示不出來, 直接忽視。

第二種解法支持 Ext js 2 和 Ext js 3 版本,但是不支持Ext js 4。憑著個人在Ext js 升級上的一些經(jīng)驗,一開始覺得把這個擴展升級到Ext js 4應(yīng)該沒有什么問題。鼓搗了半天,放棄了。 Ext js 3 升級到Ext js 4后, 日期頁面的顯示元素也做了修改, 舊版本用 tr td 居多,新版本中多了一些 div 和 a 元素。而且class 的名字也換掉了。這樣看起來,升級阻力較大。只能自己來實現(xiàn)這個擴展了。

Ext JS 4 日期控件擴展

先貼上代碼:

復制代碼 代碼如下:


/*********************************
* @author: oscar999
* @Description: New Widgets Extend from Ext
* @verion: V1.0
**********************************/

/**
* Date Picker with Week
*/
Ext.define('Ext.ux.DatePickerWithWeek',{
extend: "Ext.picker.Date",
alias : "widget.datepickerwithweek",
width: 197,
numWeeks: 6,
renderTpl:[
'<div role="grid">',
'<div role="presentation">',

'<a href="#" role="button" hidefocus="on" ></a>',
'<div>{%this.renderMonthBtn(values, out)%}</div>',

'<a href="#" role="button" hidefocus="on" ></a>',
'</div>',
'<table cellspacing="0" role="grid">',
'<thead role="presentation"><tr role="row">',
'<th role="columnheader" title="{.}">',
'<div>{.:this.firstInitial}</div>',
'</th>',
'</tpl>',

'</tr></thead>',
'<tbody role="presentation"><tr role="row">',
'<tpl for="days">',
'{#:this.isEndOfWeek}',
'{#:this.isBeginOfWeek}',
'<td role="gridcell">',
'<a role="presentation" hidefocus="on" href="#"></a>',
'</td>',
'</tpl>',
'</tr></tbody>',
'</table>',
'<tpl if="showToday">',
'<div role="presentation">{%this.renderTodayBtn(values, out)%}</div>',
'</tpl>',
'</div>',
{
firstInitial: function(value) {
//alert(value);
return Ext.picker.Date.prototype.getDayInitial(value);
},
isBeginOfWeek: function(value){
//value--;
//value--;
var end = (value === 1 || (value-1)%7 === 0);
return end ? '<td role="weekcell"><a role="presentation"></a></td>' : '';

},
isEndOfWeek: function(value) {
value--;
var end = value % 7 === 0 && value !== 0;
return end ? '</tr><tr role="row">' : '';
},
renderTodayBtn: function(values, out) {
Ext.DomHelper.generateMarkup(values.$comp.todayBtn.getRenderTree(), out);
},
renderMonthBtn: function(values, out) {
Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out);
}
}
],
fullUpdate: function(date){
this.callParent([date]);

var me = this;
var weekNodes = me.weekNodes;
var curWeekStart = Ext.Date.clearTime(new Date(date.getFullYear(), date.getMonth(), 1));
var begMonWeek = Ext.Date.getWeekOfYear(curWeekStart);
var firstDayOfMonth = Ext.Date.getFirstDayOfMonth(curWeekStart);
if(firstDayOfMonth===0)
{
begMonWeek +=1;
}
for(j=0;j<me.numWeeks;j++)
{
weekNodes[j].innerHTML = begMonWeek.toString();
begMonWeek++;
}
},
onRender : function(container, position){
var me = this;
me.callParent(arguments);
me.cells = me.eventEl.select('tbody td[role="gridcell"]');
me.textNodes = me.eventEl.query('tbody td[role="gridcell"] a');

//begin extend
me.weekcells= me.eventEl.select('tbody td[role="weekcell"]');
me.weekNodes= me.eventEl.query('tbody td[role="weekcell"] a');
//end extend
me.mon(me.eventEl, {
scope: me,
mousewheel: me.handleMouseWheel,
click: {
//fn: me.handleDateClick,
fn: function(){},
delegate: 'a.' + me.baseCls + '-date'
}
});
}
/*,initComponent: function(){
this.callParent();
}*/
});

/*
* Date Form field use Date Picker with Week
*/
Ext.define('Ext.ux.DateFieldWithWeek',{
extend: "Ext.form.field.Date",
alias : "widget.datefieldwithweek",
/*initComponent: function(){
this.callParent();
},*/
createPicker : function(){
var me = this
format = Ext.String.format;
return new Ext.ux.DatePickerWithWeek({
pickerField: me,
ownerCt: me.ownerCt,
renderTo: document.body,
floating: true,
hidden: true,
focusOnShow: true,
minDate: me.minValue,
maxDate: me.maxValue,
disabledDatesRE: me.disabledDatesRE,
disabledDatesText: me.disabledDatesText,
disabledDays: me.disabledDays,
disabledDaysText: me.disabledDaysText,
format: me.format,
showToday: me.showToday,
startDay: me.startDay,
minText: format(me.minText, me.formatDate(me.minValue)),
maxText: format(me.maxText, me.formatDate(me.maxValue)),
listeners: {
scope: me,
select: me.onSelect
},
keyNavConfig: {
esc: function() {
me.collapse();
}
}
});
}
});


原理很簡單:

1. 改寫 renderTpl, 增加星期顯示的列

2. 改寫fullUpdate, 設(shè)置星期的值。 Ext 有提供getWeekOfYear這個方法可以獲取星期

3. onRender。 這里需要特別注意的就是click 中的fn: me.handleDateClick 要給一個空函數(shù),否則選日期的時候會執(zhí)行兩次。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 阿坝县| 湘阴县| 报价| 常州市| 安乡县| 赞皇县| 贡觉县| 淮北市| 武宁县| 宁国市| 广河县| 丹阳市| 行唐县| 成安县| 波密县| 繁峙县| 蓬莱市| 大关县| 高平市| 姚安县| 常德市| 甘泉县| 星座| 九龙城区| 甘谷县| 赤水市| 修文县| 贵定县| 开江县| 恩施市| 冀州市| 房产| 玛纳斯县| 哈密市| 陇西县| 和静县| 青岛市| 安新县| 长春市| 新和县| 宾阳县|