麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 22:22:47
字體:
供稿:網(wǎng)友
前言

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

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

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

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

現(xiàn)有的解法

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

http://enikao.net/extjs/weeknumber/weeknumber.html



http://www.lubber.de/extjs/datepickerplus/

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

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

Ext JS 4 日期控件擴(kuò)展

先貼上代碼:
復(fù)制代碼 代碼如下:

/*********************************
* @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 id="{id}-innerEl" role="grid">',
'<div role="presentation" class="{baseCls}-header">',

'<a id="{id}-prevEl" class="{baseCls}-prev {baseCls}-arrow" href="#" role="button" title="{prevText}" hidefocus="on" ></a>',
'<div class="{baseCls}-month" id="{id}-middleBtnEl">{%this.renderMonthBtn(values, out)%}</div>',

'<a id="{id}-nextEl" class="{baseCls}-next {baseCls}-arrow" href="#" role="button" title="{nextText}" hidefocus="on" ></a>',
'</div>',
'<table id="{id}-eventEl" class="{baseCls}-inner" cellspacing="0" role="grid">',
'<thead role="presentation"><tr role="row">',
'<th role="columnheader" class="{parent.baseCls}-column-header" title="{.}">',
'<div class="{parent.baseCls}-column-header-inner">Wk</div>',
'</th>',
'<tpl for="dayNames">',
'<th role="columnheader" class="{parent.baseCls}-column-header" title="{.}">',
'<div class="{parent.baseCls}-column-header-inner">{.:this.firstInitial}</div>',
'</th>',
'</tpl>',

'</tr></thead>',
'<tbody role="presentation"><tr role="row">',
'<tpl for="days">',
'{#:this.isEndOfWeek}',
'{#:this.isBeginOfWeek}',
'<td role="gridcell" id="{[Ext.id()]}">',
'<a role="presentation" hidefocus="on" class="{parent.baseCls}-date" href="#"></a>',
'</td>',
'</tpl>',
'</tr></tbody>',
'</table>',
'<tpl if="showToday">',
'<div id="{id}-footerEl" role="presentation" class="{baseCls}-footer">{%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" id="{[Ext.id()]}"><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這個(gè)方法可以獲取星期

3. onRender。 這里需要特別注意的就是click 中的fn: me.handleDateClick 要給一個(gè)空函數(shù),否則選日期的時(shí)候會(huì)執(zhí)行兩次。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 午夜精品成人 | 国产激爽大片在线播放 | 日本不卡视频在线观看 | 亚洲日韩精品欧美一区二区 | 亚洲午夜久久久久 | 亚洲极色| 亚洲一区二区三区精品在线观看 | 国产自91精品一区二区 | 91av国产在线| 欧美一区二区片 | 男人天堂新地址 | 亚洲欧美aⅴ | 国产无遮挡一区二区三区毛片日本 | 欧美一级美片在线观看免费 | 久久6国产 | 狠狠久久伊人中文字幕 | 国产女同疯狂激烈互摸 | 免费激情网址 | 久久久久亚洲a | 爱唯侦察 国产合集 亚洲 | av电影直播 | 国产亚洲高清视频 | 精品二区在线观看 | 羞羞的小视频 | 偿还的影视高清在线观看 | 国产精品99久久久久久久 | av在线在线 | 亚洲一区二区三区高清视频 | 日韩av日韩 | 国产精品久久久久久婷婷天堂 | 最新一区二区三区 | 男女牲高爱潮免费视频男女 | 国内久久久久 | 国产a级网站 | 91精品国产刺激国语对白 | 亚洲最新无码中文字幕久久 | 99亚洲伊人久久精品影院红桃 | 中文字幕精品一区久久久久 | 欧美成人三级视频 | 99re热视频这里只精品 | 竹内纱里奈和大战黑人 |