这个可视化编辑器真是气人,经常将我编辑好的代码弄乱,上传文件也有些问题。
这个选择月的控件是仿照dojo的_Calendar做的,也是一个字,“差”,是用来拍砖的靶子。
if(!dojo._hasResource["bad.form._MonthPicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["bad.form._MonthPicker"] = true;
dojo.provide("bad.form._MonthPicker");
dojo.require("dojo.cldr.supplemental");
dojo.require("dojo.date.locale");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.declare(
"bad.form._MonthPicker",
[dijit._Widget, dijit._Templated],
{
templateString: "<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementYear\">\n\t\t\t\t<span class=\"dijitInline dijitCalendarIncrementControl dijitCalendarDecrease\"><span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner\">-</span></span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset'>\n\t\t\t\t<div dojoAttachPoint=\"yearLabelSpacer\" class=\"dijitCalendarMonthLabelSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"yearLabelNode\" class=\"dijitCalendarMonth\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementYear\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarIncrease\"><span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner\">+</span></div>\n\t\t\t</th>\n\t\t</tr></thead>\n\t<tbody dojoAttachEvent=\"onclick: _onMonthClick\" class=\"dijitReset dijitMonthPickerContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarSeasonTemplate\">\n\t\t\t<td class=\"dijitReset dijitCalendarMonthTemplate\"><span class=\"dijitPickerMonthLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t</table>\t\n",
/**@param:{Date}_MonthPicker的值*/
value: "",
/**@param: 用来显示的连接符*/
flag: "",
/**@param: 用来显示的值*/
displayValue: new Date(),
/** @attr: 显示宽度,默认为wide */
monthWidth: "wide",
/**@method: 设置用来显示的连接符*/
setFlag: function(flag)
{
this.flag=flag;
},
/**@method: 设置显示值
*@param: value需要显示的值
*/
setValue: function(/*Date*/ value)
{
if(!this.value || dojo.date.compare(value, this.value))
{
value=new Date(value).setDate(10);
this.displayYear =new Date(value);
this.value=new Date(value);
//this.value.setHours(0,0,0,0);
this.onChange(this.value);
this._populateGrid();
}
},
/** @method: 将日期制转换为显示值
*@param: 待转换的值
*@return: 用来显示的值
*/
getDisplayValue: function(value)
{
var showValue="";
var yearValue=value.getFullYear();
var monthValue=value.getMonth();
showValue=yearValue+this.flag+monthValue;
return showValue;
},
/**@method: 给节点文本赋值
*@param:{Object}node,{String}text
*/
_setText: function(node,text)
{
while(node.firstChild)
{
node.removeChild(node.firstChild);
}
node.appendChild(document.createTextNode(text));
},
/** @method: 弹出窗口*/
_populateGrid: function()
{
var year = this.displayYear.getFullYear();
var today = new Date(new Date(new Date().setDate(10)).setHours(0,0,0,0));
//为了防止格式化时被补零,特设一个不会被补零的值
;
/*月份0表示1月,11表示12月*/
var monthNum=-1;
//得到国际化过的月份值
var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang);
var selected = this.value.setDate(10);
/*查找月份节点,进行赋值*/
dojo.query(".dijitCalendarMonthTemplate", this.domNode).forEach(function(label, i){
var clazz="";
monthNum++;
var isAddClass=false;
var date = new Date(year,monthNum,10);
//比较是不是现在的月份
if(dojo.date.compare(date,today)==0)
{
clazz = "dijitMonthPickCurrentMonth " + clazz;
isAddClass=true;
}
//比较是不是选择的月份
if(dojo.date.compare(date,selected)==0){
clazz = "dijitCalendarSelectedMonth " + clazz;
isAddClass=true;
}
if(!isAddClass)
{
if(dojo.hasClass(label,"dijitMonthPickCurrentMonth"))
{
dojo.removeClass(label,"dijitMonthPickCurrentMonth");
}
if(dojo.hasClass(label,"dijitCalendarSelectedMonth"))
{
dojo.removeClass(label,"dijitCalendarSelectedMonth");
}
}
label.className = clazz + " dijitCalendarMonthTemplate";
label.dijitDateValue = date.valueOf();
//this._setText(label, monthNames[i]);
var template = dojo.query(".dijitPickerMonthLabel", label)[0];
this._setText(template, monthNames[i]);
}, this);
/*对年赋值*/
var y = year;
this._setText(this["yearLabelNode"],year);
var _this = this;
var typematic = function(nodeProp, dateProp, adj){
dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count)
{
if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
}, 0.8, 500);
};
typematic("incrementYear", "year", 1);
typematic("decrementYear", "year", -1);
},
/**@method: 渲染*/
postCreate: function()
{
bad.form._MonthPicker.superclass.postCreate.apply(this);
var cloneClass = dojo.hitch(this,
function(clazz, n)
{
var template = dojo.query(clazz, this.domNode)[0];
for(var i=0; i<n; i++)
{
template.parentNode.appendChild(template.cloneNode(true));
}
}
);
// 克隆3次,让每行变为3列
cloneClass(".dijitCalendarMonthTemplate",2);
// 克隆3次,显示为4季
cloneClass(".dijitCalendarSeasonTemplate",3 );
this.setValue(new Date().setDate(10));
},
/**@method: 修改显示的年份
*@param: part:变化的部分( 年) amount: 变化的值
*/
_adjustDisplay: function(/*String*/part, /*int*/amount){
this.displayYear = dojo.date.add(this.displayYear, part, amount);
this._populateGrid();
},
/**@event 响应点击月份事件*/
_onMonthClick: function(/*Event*/evt){
var node = evt.target;
dojo.stopEvent(evt);
while(!node.dijitDateValue){
node = node.parentNode;
}
this.setValue(node.dijitDateValue);
this.onValueSelected(this.value);
},
/** @event: 点击弹出窗口触发
* @param: {Date}date
*/
onValueSelected: function(/*Date*/date){
},
/** @event: 值改变触发事件
*@param: {Date}date
*/
onChange: function(/*Date*/date){
//console.log("Date change , date is "+date.getFullYear()+"\u5E74"+(date.getMonth()+1)+"\u6708"+ "now" );
},
/** @method: 是否是个有效的日期
* @param: {Date}dateObject,{String}locale
* @return: false 默认全是有效日期
*/
isDisabledDate: function(/*Date*/dateObject, /*String?*/locale){
return false;
}
}
);
}
分享到:
相关推荐
《自然语言处理导论》一书中用C++_nlp_cpp实现的代码
恢复oracle中用pl_sql删除的表
java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...
VC++6.0 中用 ADO 访问 Access 数据库 在VC++6.0 中使用 ADO 访问 Access 数据库是一种常见的数据库应用场景。ADO(ActiveX Data Objects)是一种数据访问技术,允许开发者使用 Visual C++ 等语言来访问各种数据库...
传智播客中用到的ckfinder_3.2
mycrm中用到的包 mycrm中用到的包 mycrm中用到的包mycrm中用到的包
Eclipse 中用 JDBC 连接 Sql_Server_2005 Eclipse 是一个功能强大的集成开发环境(IDE),它支持多种编程语言,包括 Java、C++、Python 等。在本篇文章中,我们将详细介绍如何在 Eclipse 中使用 JDBC 连接 Sql_...
用url_for构造URL,他接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数,未知的变量部分会添加到URL末尾作为查询参数。 构建URL而不选择直接在代码中拼URL的原因有两点: 1)在未来有更改的时候只...
sdram_model_plus 大小为256M 邓堪文老师sdram讲解中用到的代码,其他读、写、刷新、代码放在博客里 https://blog.csdn.net/qq_27841635/article/details/89059166
总的来说,"电话号码中用到的地区"这一主题涉及到了中国电话通信的基础知识,包括电话号码的结构、区号的分配原则、行政区划与电话号码的关系,以及号码的使用规则等。这份Excel文件提供了详尽的地区与区号对照,...
这是kmean聚类中用到的一个数据
得一个 3×3 的矩阵转置,用一函数实现之。在主函数中用 scanf 函数输入矩阵元素
spring中用到的设计模式
本篇将围绕"留存"这一主题,结合提供的两个数据文件`t_log_login_202302271645.csv`和`t_player_view_202302271615.csv`,深入探讨留存率计算方法、数据处理和实际应用。 首先,我们需要理解什么是留存率。留存率...
如果给定的键在字典可用,has_key()方法返回true,否则返回false。 语法 以下是has_key()方法的语法: dict.has_key(key) 参数 key — 这是要搜索在字典中的键。 ...此方法返回true,如果给定键在字典可用,否则返回...
LNA学习中用到的ADS模型
该资源为吴恩达深度学习课程在讲解多隐层神经网络时用到的工具类,主要用于获取原始数据
jfreechar 资料。在bs中用到得 jfreechar 资料。在bs中用到得 保存下
Gldas V2中用到的土壤质地数据
MS数据库中用到的工具软件mssOdbc