UTF-8编码
WCFFunction.js
/**
* Author by xiaozhuang
* Date 2007-12-14
*/
//
把从BasicForm获取的Values对象中的Y-m-d型日期转换成WCF的UTC型
function
ConvertFormValues(obj,fieldname)
{
var newResult = new Object();
for (var rootProp in obj) {
if(fieldname.indexOf(rootProp) != -1){
var dt = StrToDate(obj[rootProp]);
newResult[rootProp] = "/Date("+Date.UTC(dt.getFullYear(),dt.getMonth(),dt.getDate())+")/";
}
else if (obj[rootProp] != ""){
newResult[rootProp] = obj[rootProp];
}
}
return newResult;
}
function
ConvertResponse(obj,fieldname)
{
obj = eval("("+obj+")");
for (var prop in obj) {
if (typeof(prop) == 'string' && prop.substr(prop.length-6,prop.length) == 'Result') {
obj = this.ConvertResponseDetail(obj[prop],fieldname);
//o = o[prop];
break;
}
}
return obj;
}
function
ConvertResponseDetail(obj,fieldname)
{
//obj = eval("("+obj+")");
var newResult = new Object();
for (var rootProp in obj) {
if(fieldname.indexOf(rootProp) != -1){
var dt = eval("new " + obj[rootProp].substr(1,obj[rootProp].length-2));
newResult[rootProp] = DateToStr(dt);
}
else{
newResult[rootProp] = obj[rootProp];
}
}
return newResult;
}
function
StrToDate(str)
{
var arys= new Array();
arys=str.split('-');
var newDate=new Date(arys[0],arys[1]-1,arys[2]);
return newDate;
}
function
DateToStr(dt)
{
var str="";
if(dt.getFullYear){
var y,m,d;
y=formatNumber(dt.getFullYear(),'0000');
m=formatNumber((dt.getMonth()+1),'00'); //01-12
d=formatNumber(dt.getDate(),'00');
str= y+"-"+m+"-"+d;
}
return str;
}
/*
数字格式化函数
“,” (半角的豆号) 如果有的话,看豆号到小数点(如果有的话)前有几位,则按几位划分整数部分
“0”(数字零) 如果该位上没有数字,就补0
“#”(井号) 如果该位上有数字就输出数字,没有则不输出
*/
function
formatNumber(number,pattern)
{
var str = number.toString();
var strInt;
var strFloat;
var formatInt;
var formatFloat;
if(/./g.test(pattern)){
formatInt = pattern.split('.')[0];
formatFloat = pattern.split('.')[1];
}else{
formatInt = pattern;
formatFloat = null;
}

if(/./g.test(str)){
if(formatFloat!=null){
var tempFloat = Math.round(parseFloat('0.'+str.split('.')[1])*Math.pow(10,formatFloat.length))/Math.pow(10,formatFloat.length);
strInt = (Math.floor(number)+Math.floor(tempFloat)).toString();
strFloat = /./g.test(tempFloat.toString())?tempFloat.toString().split('.')[1]:'0';
}else{
strInt = Math.round(number).toString();
strFloat = '0';
}
}else{
strInt = str;
strFloat = '0';
}
if(formatInt!=null){
var outputInt = '';
var zero = formatInt.match(/0*$/)[0].length;
var comma = null;
if(/,/g.test(formatInt)){
comma = formatInt.match(/,[^,]*/)[0].length-1;
}
var newReg = new RegExp('(/d{'+comma+'})','g');

if(strInt.length<zero){
outputInt = new Array(zero+1).join('0')+strInt;
outputInt = outputInt.substr(outputInt.length-zero,zero)
}else{
outputInt = strInt;
}

var
outputInt = outputInt.substr(0,outputInt.length%comma)+outputInt.substring(outputInt.length%comma).replace(newReg,(comma!=null?',':'')+'$1')
outputInt = outputInt.replace(/^,/,'');

strInt = outputInt;
}

if(formatFloat!=null){
var outputFloat = '';
var zero = formatFloat.match(/^0*/)[0].length;

if(strFloat.length<zero){
outputFloat = strFloat+new Array(zero+1).join('0');
//outputFloat = outputFloat.substring(0,formatFloat.length);
var outputFloat1 = outputFloat.substring(0,zero);
var outputFloat2 = outputFloat.substring(zero,formatFloat.length);
outputFloat = outputFloat1+outputFloat2.replace(/0*$/,'');
}else{
outputFloat = strFloat.substring(0,formatFloat.length);
}

strFloat = outputFloat;
}else{
if(pattern!='' || (pattern=='' && strFloat=='0')){
strFloat = '';
}
}

return strInt+(strFloat==''?'':'.'+strFloat);
}
WCFHelper.js
/**
* Author by xiaozhuang iamxiazhuang@hotmail.com
* Date 2007-12-14
*/
/**
*ConvertResponseText:转化从WCF获取的Object转化为ExtJS表单需要的Object
*responsetext:从WCF获取的ObjectJSON字符串
*datefieldname:JSon中的日期型字段名(属性名),多个用","分开
*wrapped:JSon字符串是否被封装(WebMessageBodyStyle.Wrapped or WebMessageBodyStyle.Bare)
*ResultObject :返回值 Object
*/
function
ConvertResponseText(responsetext,datefieldname,wrapped,isobject)
{
var ResultObject;
var obj = eval("("+responsetext+")");
if (wrapped)
{
for (var prop in obj) {
if (typeof(prop) == 'string' && prop.substr(prop.length-6,prop.length) == 'Result') { //去掉××Result 封装
if(isobject){
ResultObject = ConvertResponseDetail(obj[prop],datefieldname);
} else {
ResultObject = obj[prop];
}
break;
}
}
}
else
{
if(isobject){
ResultObject = ConvertResponseDetail(obj,datefieldname);
} else {
ResultObject = obj;
}
}
return ResultObject;
}
/***私有方法**/
function
ConvertResponseDetail(obj,datefieldname)
{
var newResult = new Object();
for (var rootProp in obj) {
if(datefieldname.indexOf(rootProp) != -1){
var dt = eval("new " + obj[rootProp].substr(1,obj[rootProp].length-2)); //对UTC日期进行转化
newResult[rootProp] = DateToStr(dt);//把日期转化为字符串
}
else{
newResult[rootProp] = obj[rootProp];
}
}
return newResult;
}
/***私有方法**/
function
DateToStr(dt)
{
var str = "";
if(dt.getFullYear){
var y,m,d;
y = dt.getFullYear();
m = dt.getMonth()+1; //01-12
d = dt.getDate();
m = m>9?m:"0"+m;
d = d>9?d:"0"+d;
str= y+"-"+m+"-"+d;
}
return str;
}
/**
* Author by xiaozhuang iamxiazhuang@hotmail.com
* Date 2007-12-14
*/
/**
*ConvertFormValues:转化从表单获取的值(Object)对象为WCF需要的Object
*formvalue:从表的获取的值Object
*datefieldname:表单值的日期型字段名,多个用","分开
*ResultObject :返回值 Object
*/
function
ConvertFormValue(formvalue,datefieldname)
{
var ResultObject = new Object();
for (var prop in formvalue) {
if(datefieldname.indexOf(prop) != -1){
var dt = StrToDate(formvalue[prop]); //字符串转化为日期
ResultObject[prop] = "/Date("+Date.UTC(dt.getFullYear(),dt.getMonth(),dt.getDate())+")/"; //转化为UTC日期
}
else if (formvalue[prop] != ""){
ResultObject[prop] = formvalue[prop];
}
}
return ResultObject;
}
/***私有方法**/
function
StrToDate(str)
{
var arys = new Array();
arys=str.split('-');
var newDate=new Date(arys[0],arys[1]-1,arys[2]);
return newDate;
}
WCFHttpProxy.js
/*
* Ext JS Library 2.0
* Copyright(c) 2006-2007, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/

/**
* Author by xiaozhuang
*/
Ext.data.WCFHttpProxy
=
Ext.extend(Ext.data.HttpProxy,
{

load : function(params, reader, callback, scope, arg){
if(this.fireEvent("beforeload", this, params) !== false){

Ext.lib.Ajax.defaultPostHeader = 'application/json';
params = Ext.util.JSON.encode(params);
var o = {
params : params || {},
request: {
callback : callback,
scope : scope,
arg : arg
},
reader: reader,
callback : this.loadResponse,
scope: this
};
if(this.useAjax){
Ext.applyIf(o, this.conn);
if(this.activeRequest){
Ext.Ajax.abort(this.activeRequest);
}
this.activeRequest = Ext.Ajax.request(o);
}else{
this.conn.request(o);
}
}else{
callback.call(scope||this, null, arg, false);
}
}
}
);
WCFJsonReader.js
/**
* @class Ext.data.WCFJsonReader
* @extends Ext.data.JsonReader
*
* Custom reader for reading data from WCF. If you are using WebMessageBodyStyle.Wrapped, then WCF adds a root object to your
* JSON result:
*
* { "MethodResult": { "Count" : 0, "Objects": [ … ] } }
*
* Ext does not expect the result to have a root object before parsing, so this class will remove it.
*/
Ext.data.WCFJsonReader
=
Ext.extend(Ext.data.JsonReader,
{
/* @cfg {Boolean} Sets whether or not the OperationContract has the is using WebMessageBodyStyle.Wrapped */
wrapped: true,
/**
* If wrapped is set to true, we will strip WCF’s wrap object
*/
read : function(response){
var json = response.responseText;
var o = eval("("+json+")");
if(!o) {
throw {message: "JsonReader.read: Json object not found"};
}
if (this.wrapped) {
for (var prop in o) {
if (typeof(prop) == 'string' && prop.substr(prop.length-6,prop.length) == 'Result') {
o = this.convert(o[prop]);
//o = o[prop];
break;
}
}
}
if(o.metaData){
delete this.ef;
this.meta = o.metaData;
this.recordType = Ext.data.Record.create(o.metaData.fields);
this.onMetaChange(this.meta, this.recordType, o);
}
return Ext.data.WCFJsonReader.superclass.readRecords.call(this, o);
},
//private
convert : function(o) {
o = eval("("+o+")");
var newResult = new Object();
for (var rootProp in o) {
newResult[rootProp] = o[rootProp];
}
return newResult;
}
}
);
WCFFunction.js















































































































































WCFHelper.js
































































































WCFHttpProxy.js











































WCFJsonReader.js


















































