亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 22:22:47
字體:
來源:轉載
供稿:網友
前言

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

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

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

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

現有的解法

到網絡上去看看基于Ext js 的解法:有找到兩個

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



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

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

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

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 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, 設置星期的值。 Ext 有提供getWeekOfYear這個方法可以獲取星期

3. onRender。 這里需要特別注意的就是click 中的fn: me.handleDateClick 要給一個空函數,否則選日期的時候會執行兩次。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情小视频| 美日韩精品免费视频| 国产伦精品一区二区三区精品视频| 日韩女优在线播放| 97视频在线观看亚洲| 日本中文字幕成人| 97精品国产97久久久久久| 国模视频一区二区三区| 日韩精品在线影院| 日韩美女中文字幕| 97人洗澡人人免费公开视频碰碰碰| 日韩在线视频观看正片免费网站| 亚洲精品v欧美精品v日韩精品| 大胆人体色综合| 成人国产在线激情| 欧美一区视频在线| 欧美性猛交xxxx免费看| 久久精品国产欧美亚洲人人爽| 91精品久久久久| 日韩电影在线观看免费| 97在线视频观看| 亚洲第一页自拍| 日本三级韩国三级久久| 91成人国产在线观看| 国产精品激情av电影在线观看| 欧美激情第6页| 国产日韩精品视频| 国模极品一区二区三区| 尤物九九久久国产精品的特点| 亚洲人午夜精品免费| 最近2019年中文视频免费在线观看| 91亚洲精品久久久| 少妇av一区二区三区| 国产在线观看91精品一区| 亚洲国产精品久久久久秋霞蜜臀| 国产精品美腿一区在线看| 中文字幕亚洲天堂| 欧美激情在线有限公司| 亚洲xxx大片| 成人写真福利网| 2021久久精品国产99国产精品| 热99精品只有里视频精品| 亚洲国产精品va在线观看黑人| 亚洲国产精品嫩草影院久久| 欧美日韩中文字幕日韩欧美| 97久久伊人激情网| 欧美性生交xxxxx久久久| 一区二区成人av| 亚洲成人激情在线| 日韩高清免费观看| 中文字幕亚洲欧美日韩高清| 日韩欧美福利视频| 国产日本欧美一区二区三区在线| 国产精品一区二区三区在线播放| 91网站在线免费观看| 丝袜美腿精品国产二区| 亚洲一区美女视频在线观看免费| 播播国产欧美激情| 亚洲美女福利视频网站| 国产ts人妖一区二区三区| 亚洲网站在线观看| 欧美性猛交xxx| 成人av色在线观看| 日本免费一区二区三区视频观看| y97精品国产97久久久久久| 中文字幕在线观看亚洲| 日韩一区在线视频| 久久久亚洲网站| 国产99久久精品一区二区| 日韩在线观看电影| 最近更新的2019中文字幕| 91在线视频免费| 欧美精品久久久久久久久久| 国产精品wwwwww| 久久91亚洲精品中文字幕| 欧美日韩美女在线观看| 精品国产一区二区三区久久久| 海角国产乱辈乱精品视频| 欧美成人免费观看| 国产91色在线免费| 91精品久久久久久久久| 欧美xxxx18性欧美| 日韩av在线播放资源| 欧美电影免费观看电视剧大全| 午夜免费在线观看精品视频| 热re99久久精品国产66热| 欧美精品福利在线| 97超级碰在线看视频免费在线看| 91爱爱小视频k| 日韩美女视频免费在线观看| 久久99久久99精品免观看粉嫩| 中文.日本.精品| 中文字幕亚洲专区| 精品久久久免费| 国产视频自拍一区| 少妇高潮久久久久久潘金莲| 久久久久久有精品国产| 久热精品视频在线| 欧美大片欧美激情性色a∨久久| 国产精品成久久久久三级| 日本在线观看天堂男亚洲| 国内精品模特av私拍在线观看| 欧美日韩亚洲91| 国产精品r级在线| 伊人久久久久久久久久久| 国内久久久精品| 亚洲天堂av在线免费观看| 亚洲综合中文字幕在线观看| 国产精品久久久久久久久久免费| 中日韩午夜理伦电影免费| 欧美激情女人20p| 青青久久aⅴ北条麻妃| 日本一区二区三区在线播放| 亚洲女成人图区| 在线日韩欧美视频| 2019中文字幕在线| 国产日韩av在线播放| 日本道色综合久久影院| 国产日本欧美一区二区三区在线| 欧美激情第99页| 亚洲精品在线不卡| 久久久久久这里只有精品| 国产精品免费在线免费| 亚洲va欧美va在线观看| 国产精品18久久久久久首页狼| 91九色精品视频| 国产做受69高潮| 成人黄色短视频在线观看| 日韩成人中文字幕在线观看| 在线观看国产成人av片| 中文字幕在线看视频国产欧美在线看完整| 久久久久中文字幕| 两个人的视频www国产精品| 国产精品久久久久久久av电影| 疯狂欧美牲乱大交777| 成人在线视频网| 一区二区在线免费视频| 亚洲国产一区自拍| 主播福利视频一区| 亚洲免费av电影| 波霸ol色综合久久| 久久精品99无色码中文字幕| 欧美成人在线免费| 三级精品视频久久久久| 色婷婷综合成人av| 国产精品h片在线播放| 久久精品一本久久99精品| 91av国产在线| 91性高湖久久久久久久久_久久99| 欧美久久精品午夜青青大伊人| 亚洲系列中文字幕| 日韩av电影中文字幕| 这里只有精品视频| 亚洲无线码在线一区观看| 欧美另类69精品久久久久9999| 国产精品美女主播在线观看纯欲| 精品国产精品自拍| 日韩中文字幕网址| 欧美极品少妇xxxxⅹ喷水| 国产精品久久一区| 国产欧美精品一区二区| 庆余年2免费日韩剧观看大牛| 91免费福利视频| 日韩美女视频免费看|