新瓶舊酒ASP.NET AJAX(7) - 用戶端腳本程式設計(Sys命名空間下的類)
介紹
Sys命名空間是Microsoft AJAX Library的根命名空間。本文主要學習一下其中的Application類、ApplicationLoadEventArgs類、CultureInfo類和StringBuilder類。
關鍵
1、Application Class
·init事件 - 腳本加載完畢,對象建立之前。
·load事件 - 對象被建立和初始化。可以用pageLoad()
·unload事件 - window.unload時。可以用pageUnload()
·notifyScriptLoaded() - 通知ScriptManager某段腳本已經加載完畢
2、ApplicationLoadEventArgs Class
·components - 最後一次觸發load事件時建立的Components
·isPartialLoad - 是否是部分重新整理
3、CultureInfo Class
·CurrentCulture字段 - 目前的Culture,傳回CurrentCulture對象
·name字段 - Culture的名稱
·dateTimeFormat - 獲得dateTimeFormat對象,其内有n多格式化類型
·numberFormat - 獲得numberFormat對象,其内有n多格式化類型
4、StringBuilder Class
·append(text) - 添加指定字元串到StringBuilder對象的結尾
·appendLine() - 添加一個換行符到StringBuilder對象的結尾
·appendLine(text) - 添加指定字元串到StringBuilder對象的結尾并添加一個換行符
·clear() - 清除StringBuilder對象所有内容
·isEmpty() - StringBuilder對象的内容是否為空
·toString() - 将StringBuilder對象的内容轉換為字元串
·toString(separator) - 在StringBuilder對象内的每一個元素的結尾處添加指定字元串
示例
CustomButton.js
Type.registerNamespace("Demo");
Demo.CustomButton = function(element)
{
// 該類繼承自Sys.UI.Control,調用基類構造函數
Demo.CustomButton.initializeBase(this, [element]);
this._clickDelegate = null;
this._hoverDelegate = null;
this._unhoverDelegate = null;
}
Demo.CustomButton.prototype =
// 定義text屬性 - 元素顯示的資訊
get_text: function()
{
// element - Sys.UI.Control的屬性
return this.get_element().innerHTML;
},
set_text: function(value)
this.get_element().innerHTML = value;
// 添加或移除click事件
add_click: function(handler)
// events - Sys.Component的屬性
this.get_events().addHandler('click', handler);
remove_click: function(handler)
this.get_events().removeHandler('click', handler);
// 添加或移除hover事件
add_hover: function(handler)
this.get_events().addHandler('hover', handler);
remove_hover: function(handler)
this.get_events().removeHandler('hover', handler);
// 添加或移除unhover事件
add_unhover: function(handler)
this.get_events().addHandler('unhover', handler);
remove_unhover: function(handler)
this.get_events().removeHandler('unhover', handler);
// 釋放資源
dispose: function()
var element = this.get_element();
if (this._clickDelegate)
{
// Sys.UI.DomEvent removeHandler()
$removeHandler(element, 'click', this._clickDelegate);
delete this._clickDelegate;
}
if (this._hoverDelegate)
$removeHandler(element, 'focus', this._hoverDelegate);
$removeHandler(element, 'mouseover', this._hoverDelegate);
delete this._hoverDelegate;
if (this._unhoverDelegate)
$removeHandler(element, 'blur', this._unhoverDelegate);
$removeHandler(element, 'mouseout', this._unhoverDelegate);
delete this._unhoverDelegate;
Demo.CustomButton.callBaseMethod(this, 'dispose');
// 初始化
initialize: function()
if (!element.tabIndex) element.tabIndex = 0;
if (this._clickDelegate === null)
// Function.createDelegate用來建立一個調用“this”上下文下的特定函數的委托
this._clickDelegate = Function.createDelegate(this, this._clickHandler);
// Sys.UI.DomEvent addHandler()
$addHandler(element, 'click', this._clickDelegate);
if (this._hoverDelegate === null)
this._hoverDelegate = Function.createDelegate(this, this._hoverHandler);
$addHandler(element, 'mouseover', this._hoverDelegate);
$addHandler(element, 'focus', this._hoverDelegate);
if (this._unhoverDelegate === null)
this._unhoverDelegate = Function.createDelegate(this, this._unhoverHandler);
$addHandler(element, 'mouseout', this._unhoverDelegate);
$addHandler(element, 'blur', this._unhoverDelegate);
Demo.CustomButton.callBaseMethod(this, 'initialize');
// click事件處理器
_clickHandler: function(event)
var h = this.get_events().getHandler('click');
if (h) h(this, Sys.EventArgs.Empty);
// hover事件處理器
_hoverHandler: function(event)
var h = this.get_events().getHandler('hover');
// unhover事件處理器
_unhoverHandler: function(event)
var h = this.get_events().getHandler('unhover');
}
Demo.CustomButton.registerClass('Demo.CustomButton', Sys.UI.Control);
// 通知ScriptManager這段腳本已經加載完畢
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
Application.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Application.aspx.cs"
Inherits="ClientScripting_Sys_Application" Title="init Event和load Event和unload Event" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="Server">
<Scripts>
<asp:ScriptReference Path="~/ClientScripting/Sys/CustomButton.js" />
</Scripts>
</asp:ScriptManagerProxy>
<script type="text/javascript">
Sys.Application.add_init(applicationInitHandler);
function applicationInitHandler()
// Sys.Component.create()
$create
(
Demo.CustomButton,
{text: '自定義Button(Button1)'},
{click: doClick, hover: doHover, unhover: doUnhover},
null,
$get('Button1')
);
{text: '自定義Button(Label1)'},
$get('Label1')
function doClick(sender, e)
Sys.Debug.trace("滑鼠點選" + sender.get_id());
function doHover(sender, e)
Sys.Debug.trace("滑鼠經過" + sender.get_id());
function doUnhover(sender, e)
Sys.Debug.trace("滑鼠離開" + sender.get_id());
Sys.Application.add_load(applicationLoadHandler);
function applicationLoadHandler(sender, e)
alert("ApplicationLoad");
// isPartialLoad - 是否是部分重新整理
Sys.Debug.trace('是否是部分重新整理:' + e.get_isPartialLoad());
for (var i=0; i<e.get_components().length; i++)
{
// components - 最後一次觸發load事件時建立的Components
Sys.Debug.trace('最後一次觸發load事件時建立的Component:' + e.get_components()[i].get_id());
}
Sys.Application.add_unload(applicationUnloadHandler);
function applicationUnloadHandler()
alert('ApplicationUnload');
function pageLoad()
// Sys.Application.findComponent() - 根據id查找Component
// Sys.Application.findComponent(id, parent) - parent可選
alert($find('Button1').get_id());
</script>
function listComponents()
// getComponents() - 獲得所有Component(數組)
var c = Sys.Application.getComponents();
for (var i=0; i<c.length; i++)
var id = c[i].get_id();
var type = Object.getTypeName(c[i]);
Sys.Debug.trace('Component:' + i + ': id=' + id + ', type=' + type);
<p>
<button type="button" id="Button1">
</button>
<span id="Label1"></span>
</p>
<input type="button" id="Button2" value="列舉所有Component" />
<textarea id="TraceConsole" style="width: 500px; height: 400px;"></textarea>
</asp:Content>
運作結果
1、頁面加載
彈出框,資訊:ApplicationLoad
是否是部分重新整理:false
最後一次觸發load事件時建立的Component:Button1
最後一次觸發load事件時建立的Component:Label1
彈出框,資訊:Button1
2、滑鼠點選、經過和離開“自定義Button(Button1)”或“自定義Button(Label1)”
有相應的提示
3、單擊“列舉所有Component”按鈕
Component:0: id=Button1, type=Demo.CustomButton
Component:1: id=Label1, type=Demo.CustomButton
4、關閉浏覽器
彈出框,資訊:ApplicationUnload
CultureInfo.aspx(注:設定ScriptManager的EnableScriptGlobalization="True")
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CultureInfo.aspx.cs"
Inherits="ClientScripting_Sys_CultureInfo" Title="CultureInfo" Culture="auto"
UICulture="auto" %>
<script runat="Server">
protected override void InitializeCulture()
string s = Request.QueryString["currentculture"];
if (!String.IsNullOrEmpty(s))
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(s);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(s);
<a href="?currentculture=zh-cn">中文</a> <a href="?currentculture=en-us">英文</a>
<a href="?currentculture=sq">阿爾巴尼亞語</a>
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</div>
// 建立一個Sys.CultureInfo對象
var cultureObject = Sys.CultureInfo.CurrentCulture;
// 目前Culture的名稱
var cultureName = cultureObject.name;
// 獲得dateTimeFormat對象
var dtfObject = cultureObject.dateTimeFormat;
// 建立一個具有各種格式化類型的數組
var myArray =
[
'AMDesignator',
'Calendar',
'DateSeparator',
'FirstDayOfWeek',
'CalendarWeekRule',
'FullDateTimePattern',
'LongDatePattern',
'LongTimePattern',
'MonthDayPattern',
'PMDesignator',
'RFC1123Pattern',
'ShortDatePattern',
'ShortTimePattern',
'SortableDateTimePattern',
'TimeSeparator',
'UniversalSortableDateTimePattern',
'YearMonthPattern',
'AbbreviatedDayNames',
'ShortestDayNames',
'DayNames',
'AbbreviatedMonthNames',
'MonthNames',
'IsReadOnly',
'NativeCalendarName',
'AbbreviatedMonthGenitiveNames',
'MonthGenitiveNames'
];
var result = '區域名稱:' + cultureName;
for (var i = 0, l = myArray.length; i < l; i++)
var arrayVal = myArray[i];
if (typeof(arrayVal) !== 'undefined')
result += "<tr><td>" + arrayVal + "</td><td>" + eval("dtfObject." + arrayVal) + '</td></tr>';
var resultHeader = "<tr><td><b>格式化類型</b></td><td><b>格式化值</b></td></tr>"
$get('<%= Label1.ClientID %>').innerHTML = "<table border=1>" + resultHeader + result +"</table>";
var d = new Date();
$get('<%= Label2.ClientID %>').innerHTML = "<p/><h3>dateTimeFormat示例:" +
d.localeFormat(Sys.CultureInfo.CurrentCulture.dateTimeFormat.FullDateTimePattern) + "</H3>";
// 獲得numberFormat對象
nfObject = cultureObject.numberFormat;
myArray =
'CurrencyDecimalDigits',
'CurrencyDecimalSeparator',
'IsReadOnly',
'CurrencyGroupSizes',
'NumberGroupSizes',
'PercentGroupSizes',
'CurrencyGroupSeparator',
'CurrencySymbol',
'NaNSymbol',
'CurrencyNegativePattern',
'NumberNegativePattern',
'PercentPositivePattern',
'PercentNegativePattern',
'NegativeInfinitySymbol',
'NegativeSign',
'NumberDecimalDigits',
'NumberDecimalSeparator',
'NumberGroupSeparator',
'CurrencyPositivePattern',
'PositiveInfinitySymbol',
'PositiveSign',
'PercentDecimalDigits',
'PercentDecimalSeparator',
'PercentGroupSeparator',
'PercentSymbol',
'PerMilleSymbol',
'NativeDigits',
'DigitSubstitution'
result = '區域名稱:' + cultureName;
result += "<tr><td>" + arrayVal + "</td><td>" + eval("nfObject." + arrayVal) + '</td></tr>';
$get('<%= Label3.ClientID %>').innerHTML = "<table border=1>" + resultHeader + result + "</table>";
var n = 99.987;
$get('<%= Label4.ClientID %>').innerHTML = "<p/><h3>numberFormat示例:" + n.localeFormat("C") + "<h3>";
區域名稱:zh-CN
格式化類型
格式化值
AMDesignator
上午
Calendar
[object Object]
DateSeparator
-
FirstDayOfWeek
CalendarWeekRule
FullDateTimePattern
yyyy'年'M'月'd'日' H:mm:ss
LongDatePattern
yyyy'年'M'月'd'日'
LongTimePattern
H:mm:ss
MonthDayPattern
M'月'd'日'
PMDesignator
下午
RFC1123Pattern
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern
yyyy-M-d
ShortTimePattern
H:mm
SortableDateTimePattern
yyyy'-'MM'-'dd'T'HH':'mm':'ss
TimeSeparator
:
UniversalSortableDateTimePattern
yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern
yyyy'年'M'月'
AbbreviatedDayNames
日,一,二,三,四,五,六
ShortestDayNames
DayNames
星期日,星期一,星期二,星期三,星期四,星期五,星期六
AbbreviatedMonthNames
一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月,
MonthNames
IsReadOnly
true
NativeCalendarName
公曆
AbbreviatedMonthGenitiveNames
MonthGenitiveNames
CurrencyDecimalDigits
2
CurrencyDecimalSeparator
.
CurrencyGroupSizes
3
NumberGroupSizes
PercentGroupSizes
CurrencyGroupSeparator
,
CurrencySymbol
¥
NaNSymbol
非數字
CurrencyNegativePattern
NumberNegativePattern
1
PercentPositivePattern
PercentNegativePattern
NegativeInfinitySymbol
負無窮大
NegativeSign
NumberDecimalDigits
NumberDecimalSeparator
NumberGroupSeparator
CurrencyPositivePattern
PositiveInfinitySymbol
正無窮大
PositiveSign
+
PercentDecimalDigits
PercentDecimalSeparator
PercentGroupSeparator
PercentSymbol
%
PerMilleSymbol
‰
NativeDigits
0,1,2,3,4,5,6,7,8,9
DigitSubstitution
StringBuilder.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="StringBuilder.aspx.cs"
Inherits="ClientScripting_Sys_StringBuilder" Title="StringBuilder" %>
<textarea id="TraceConsole" style="width: 500px; height: 300px;"></textarea>
function buildString(title)
// 建立一個StringBuilder對象
var sb = new Sys.StringBuilder("aaa");
// toString() - 将StringBuilder對象的内容轉換為字元串
Sys.Debug.trace("StringBuilder:" + sb.toString());
// 添加指定字元串到StringBuilder對象的結尾
sb.append("bbb");
Sys.Debug.trace("StringBuilder:" + sb);
// 添加指定字元串到StringBuilder對象的結尾并添加一個換行符
sb.appendLine("ccc");
// 添加一個換行符到StringBuilder對象的結尾
sb.appendLine();
// toString(separator) - 在StringBuilder對象内的每一個元素的結尾處添加指定字元串
// 然後将StringBuilder對象的内容轉換為字元串
Sys.Debug.trace("StringBuilder:" + sb.toString('xxx'));
// 清除StringBuilder對象所有内容
sb.clear();
// StringBuilder對象的内容是否為空
var bln = sb.isEmpty();
Sys.Debug.trace("StringBuilder:" + bln);
function pageLoad()
buildString();
StringBuilder:aaa
StringBuilder:aaabbb
StringBuilder:aaabbbccc
StringBuilder:aaaxxxbbbxxxccc
xxx
StringBuilder:
StringBuilder:true
本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/344803,如需轉載請自行聯系原作者