星期五, 八月 24, 2007

关于Javascript的this关键词的解释.

往往在函数中使用this关键词
function checkme()
{
alert(this.value);
}

此时this代表 是当前聚焦的可视HTML元素(focus element).比如一个下拉框,输入框等等。

最严密的说法如下:

http://www.quirksmode.org/js/this.html

In JavaScript this always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. When we define our faithful function doSomething() in a page, its owner is the page, or rather, the window object (or global object) of JavaScript. An onclick property, though, is owned by the HTML element it belongs to.

星期四, 八月 09, 2007

如何编写自己的dojo widget(物件)?

网络上有很多的方法。

包括什么使用以下方法来申明:

dojo.setModulePrefix('wang', '../wang');
dojo.registerModulePath('wang', '../wang');
dojo.widget.manager.registerWidgetPackage('wang.widget');
但会出现很多的问题和错误。

这篇文章的方法是最简单的
http://www.alexatnet.com/node/14

简单来说步骤如下:

1.建立一个目录

假设目前js目录结构如下:
/js/dojo-0.4.3-ajax
/js /wang //你自己定做的dojo widget 库
/js/wang/widget/ Memo.html, Memo.css

那么你需要建立的声明文件Menu.js保存在/js目录下.

2.建立新的widget声明文件Menu.js

Menu.js内容如下:

dojo.widget.defineWidget(
// widget name and class
"wang.widget.Memo",

// superclass
dojo.widget.HtmlWidget,

// properties and methods
{
// parameters
title: "Note",

// settings
isContainer: true,
templatePath: dojo.uri.dojoUri("../wang/widget/Memo.html"),
//注意:这个目录是相对于dojo.js所在目录的相对目录.
templateCssPath: dojo.uri.dojoUri("../wang/widget/Memo.css"),

// callbacks
onClick: function(evt){
this.destroy();
}
}
);

3.在HTML里应用声明

<script src="js/Memo.js"></script>

4.通过dojoType来使用新的widget
<div dojoType="Memo" title="你好世界">
你好吗?
</div>

效果如下:

星期三, 八月 08, 2007

Javascript的匿名函数和JSON。

http://www.json.org/
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON的表达语法:
object //用两个大花括号把对象数组包含起来。
{}
{ members }

members //成员
pair
pair , members
pair //标准的名字:值
string : value
array //数组用两个中括号包含起来的
[]
[ elements ]
elements
value
value , elements
value
string
number
object
array
true
false
null

简单的一个小技巧,如何把一个符合JSON数组表达的字符串转为Javascript数组对象
<script>
var arr
var str="[['line 1','line 2'],['line 1','line 2']]";
eval("arr="+str);
alert(arr[0][0]);
</script>

星期二, 七月 31, 2007

如何避免JSP文件产生空格或空白行(whitespace)

jsp的解析器,忠实的输出jsp文件里包含的没一个字符,如果发现一个<%%> 对,就会在解析完成后,则把<%%>解释后的结果输出。
所以,避免JSP文件产生空白行的办法,就是需要把所有的<%%>连起来书写,在jsp文件中减少手动的回车换行,就可以避免JSP文件产生空白行了。

比如.
<%@ page contentType="text/xml;" %><%@page import="com..dao.Mrp_Workload_Capacity_Calculate_DAO"%><%@ page import="com.sun.rowset.CachedRowSetImpl"%><%@ page import="com.util.DBUtil"%><%...%>

星期五, 七月 27, 2007

DHMTL Grid Paginal 语法.

http://www.nauticalworld.co.uk/jscripts/dhtmlxTreeGrid/samples/pro_paging_wt.html

<div id="gridbox" width="100%" height="250px" style="background-color:white;overflow:hidden"></div>//显示grid数据地方
<div id="recinfoArea" style="width:100%;"></div>//用来显示导航条的地方
<script>
mygrid = new dhtmlXGridObject('gridbox');
...
//should be called before init()
mygrid.enablePagingWT(true,10,3,"recinfoArea");
...
mygrid.init();
mygrid.setXMLAutoLoading("dynscroll.php");//如果想每次点击下一页的时候从服务器读取数据,必须要加入这一行,通过url参数rowsLoaded=N 在服务器段来获取下一页的数据

mygrid.loadXML("dynscroll.xml");//this sample uses static loading
</script>

星期三, 七月 25, 2007

Javascript匿名function(或无名unnamed)的申明

Anonymous function(or Unnamed function)语法:

var greet=function(){....}//可以有参数,或无参数。

调用的方法:greet();如果有参数,需要再调用的时候加入参数.

对象常量 Object Literals:

var car = {myCar:(function(){return "WIlliam";}), getCar: "Honda", special: "Sales"}
调用:
document.write(car.myCar()); // WIlliam
document.write(car.getCar); // Honda
document.write(car.special); // Sales
对象常量同匿名function 组合,可以写出非常复杂的表达。

var car = {myCar:(function(){return "WIlliam";}), getCar: "Honda", special: "Sales"}
document.write(car.myCar); // WIlliam
document.write(car.getCar); // Honda
document.write(car.special); // Toyota
或另一个常用语法

var Person=function(){}
Person.prototype.name="William"
Person.prototype.age=17
who=new Person();

document.write(who.name);

Javascript的匿名function 的语法主要设计到Javascript如何对面向对象的支持。

var Person=function(){}
Person.prototype = {
initialize: function(name) {
this.name = name;
},
greet: (function() {
return("Hello from " + this.name+"");
})
};

who=new Person();
who.initialize("William");
alert(who.greet());

一个比较好的地址:http://blogs.sun.com/sundararajan/entry/java_javascript_and_jython

星期五, 七月 20, 2007

dojo TabContainer Javascript控制

<div id="mainTabContainer" selectedTab="这里是{CalendarPart,vocationPart,WorkCenterPart}之一" dojoType="TabContainer" style="width: 100%; height: 26em;">
<div id="CalendarPart" dojoType="ContentPane" href="1.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Calendar</b>"></div>
<div id="vocationPart" dojoType="ContentPane" href="2.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Holiday</b>"></div>
<div id="WorkCenterPart" dojoType="ContentPane" href="3.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Work Center</b>"></div>
</div>

每个contentPane内容的改变,典型使用以下Script
<script>
var obj =dojo.widget.byId("WorkCenterPart");
//alert(obj);
obj.setUrl("");//新的动态内容url
</script>

星期二, 七月 17, 2007

WINDOWS XP Dr Watson Log file.

任务管理器,选择进程,鼠标右键选择调试,然后查看log文件

c:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson\drwtsn32.log

星期日, 七月 15, 2007

飞狐 运行VBS公式出现错误处理。

在飞狐公式中运行VBS公式出现以下错误的提示:

"脚本引擎请求位置对象信息:"Wscript"",脚本引擎请求位置对象信息:"JSProxy"

解决方法:

进入windows目录下,再进入system32目录下,运行:
regsvr32 jscript.dll
regsvr32 vbscript.dll

再启动飞狐软件或股道软件就可以了。

Java Rest框架。

https://cetia4.dev.java.net/

支持:Servlet API.

支持ROR的Java框架.

http://grails.codehaus.org/

星期五, 七月 13, 2007

XML CDATA,强大的万能标签。

CDATA

Everything inside a CDATA section is ignored by the parser.

If your text contains a lot of "<" or "&" characters - as program code often does - the XML element can be defined as a CDATA section.

A CDATA section starts with "<![CDATA[" and ends with "]]>":


<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}
]]>
</script>

In the example above, everything inside the CDATA section is ignored by the parser.

Notes on CDATA sections:

A CDATA section cannot contain the string "]]>", therefore, nested CDATA sections are not allowed.

Also make sure there are no spaces or line breaks inside the "]]>" string.

星期四, 七月 05, 2007

动态创建复杂form之二

方法一:

formname.document.createElement("form");
document.body.appendChild(formname); //关键语句,否则submit()方法没有实际动作

//add other node
txtObj = document.createElement("input");
//1
txtObj.setAttribute("type","hidden");
txtObj.setAttribute("name","username");
txtObj.setAttribute("value","William");
formname.appendChild(txtObj);
//2
txtObj2 = document.createElement("input");
txtObj2.setAttribute("type","hidden");
txtObj2.setAttribute("name","actionTarget");
txtObj2.setAttribute("value","VacationSetting");
formname.appendChild(txtObj2);
formname.action = target;
formname.method="post";
formname.submit();

方法二:

var f = document.createElement(’form’);
document.body.appendChild(f); //关键语句,否则submit()方法没有实际动作

f.style.display = ‘none’; this.parentNode.appendChild(f);
var h = document.createElement(’input’);
h.type = ‘hidden’; h.name = ‘act’; h.value = ‘admin’;
f.appendChild(h);

var h2 = document.createElement(’input’);
h2.type = ‘hidden’; h2.name = ’setadmin’; h2.value = ‘delcat’;
f.appendChild(h2);

f.method = ‘POST’;
f.action = ‘index.php’;
f.submit();
return false

方法三:

function doIt()
{
formname = document.createElement("form");
document.body.appendChild(formname);
//add other node
txtObj = document.createElement("");
formname.appendChild(txtObj);
//2
txtObj2 = document.createElement("");
formname.appendChild(txtObj2);
//3
txtObj3 = document.createElement("");
formname.appendChild(txtObj3);

formname.action = target;
formname.method="POST";

formname.submit();
}

星期三, 七月 04, 2007

用Javascript和DOM完全动态建立一个Form

Form Element Interfa

1.建立一个提交的Form
// Create a form
var f = document.createElement("form");

// Add it to the document body
document.body.appendChild(f);

// Add action and method attributes
f.action = "/cgi-bin/some.cgi";
f.method = "POST"

// Call the form's submit method
f.submit();

星期二, 六月 26, 2007

绝妙招数,JSP页面不能刷新

通过javascript在页面更深,删除后,通过调用window.location.reload()或者window.location.href
的方式来刷新jsp页面,浏览器只是从cache里调用,并没有从服务器段刷新新的页面

如何能通过Javascript来手动刷新jsp页面呢。

秘密在于要加入以下一句

window.returnValue=0;

星期一, 六月 11, 2007

Motorala E6墙纸 Linux下的路径

Motorala E6 wallpater的路径在:

\\169.254.142.2\system\usr\data_resource\picture

星期一, 五月 14, 2007

Motorola E6 修改开机画面。

\\169.254.142.2\system\ezx_user\download\appwrite\setup\ezx_theme.cfg

[THEME_CONFIG_TABLE]
PowerOffScreen = /usr/data_resource/animation/Moto2.gif
PowerOnScreen = /usr/data_resource/animation/Moto1.gif
WallPaper = /usr/data_resource/picture/Home_Wallpaper6.gif

这个图片是240x320 256色的大小GIF89 gif图片。

你可以把图片放到你的SD卡的某个目录上,然后修改这个文件里的目录

Motorola E6 解除手机四个按钮自定义冻结

\\169.254.142.2\system\ezx_user\download\appwrite\setup\ezx_idle.cfg

发现:

[static]
nextEvent = 0
shortcut_1 = fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490
shortcut_1_freeze = 1
shortcut_1_icon_name = Home_CMCC_Service_B.gif
shortcut_2 = 95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40
shortcut_2_freeze = 1

这样就可以在设置里的主屏定义里修改快捷方式了。

Motorola E6的一些说明

Motorola E6使用的是:MontaVista(R) Linux(R) Consumer Electronics Edition 3.1
在网络上找到这个公司网址及文档的说明地址:http://www.mvista.com/product_datasheets.php

不过没有关于里面系统管理的说明,图形是基于
MontaVista Graphics,主要基于两个X window Management:ICEWM和 matchBox,开发UI主要是基于GTK+,
奇怪的是其Motolora的目录里包含:QTDownload的目录,

奇怪。

现在像解决的是,如何定义新的系统分类或修改。

通过USBLAN telnet方式或samba方式 \\169.254.142.2\system 的方式来访问Motorola E6 手机,也不知道修改那个文件。

有人说是修改:\\169.254.142.2\system\ezx_user\download\appwrite\am\UserMenuTree
但因为队X window的配置文件不熟悉,看起来如看天书啊

[2a58c0d6-05c6-45aa-8938-63059d41a4e9]
Items = cb839c8f-72c3-42ac-bf17-b01080cb5705;e8c83dac-db4e-4fb5-98a6-61de1998b277;b18dbbd2-503a-4442-9308-5575ee38c210;51f2cb88-3040-4f00-b66c-c4bb974e4d18;67dc1191-2928-4938-abce-1a73cb5ce490;3bb7f1b5-12bb-4b79-985b-96436e094256;48973844-3955-4323-b5a0-f69435a1dba0
[3bb7f1b5-12bb-4b79-985b-96436e094256]
Items = 5b608840-eb39-4d34-bfdb-8806436d140d;95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40;9faafa35-0688-4529-8310-04f215cb2d0c;ba63e2ca-089c-4a95-8e13-81522eed47a0;fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490;c4e5410b-c0fe-4889-8619-6bdce79f0e47;
[48973844-3955-4323-b5a0-f69435a1dba0]
Items = acd47a08-a135-72ed-9378-5054f598b326;
[51f2cb88-3040-4f00-b66c-c4bb974e4d18]
Items = 5af701f6-33e3-4fe6-b15e-b7ef7c986c74;0f0c629a-9524-4fc9-8429-6df7dedf394d;067a149d-00b4-4ba3-b839-11ab2dbd88c0;bacc9585-ae26-4cf9-8e72-fb520709b4b0;23723ec3-ab86-408a-86c0-f70ac6f5c153;c30158ae-e2a7-4d1c-9f6c-3b079c2f4c4e;6aff7618-c940-48d9-ad3b-3106d9a884c2;0b6c1459-2fbe-4b2e-95c9-a4f93762fa11
[67dc1191-2928-4938-abce-1a73cb5ce490]
Items = 18b62bb5-bd39-4397-9076-fe912a4b6dd0;8a2b9b37-83e7-a8d9-82cf-0bcbe2070002;8a2b9b37-83e7-a8d9-82cf-0bcbe2070001;b0fc7131-b9c1-d70c-82bb-c8893c8a78c2;b726141b-9a5c-1755-b2dd-47da885ae301;25a634e7-6fc5-d058-a2b9-3f6c70a9b430;278e9dbc-0e9b-bc69-8e44-039c62556527;;8a2b9b37-83e7-a8d9-82cf-0bcbe2070003
[b18dbbd2-503a-4442-9308-5575ee38c210]
Items = c1e0df66-11ef-4b33-bddb-0cbd13827312;5e558577-7be1-405a-a888-e65d20a2908a;4d690409-f29f-48f4-8967-48fc151b2272;6cd5ea93-d3e2-4cbd-ac46-9dad6ff62b46;5382eeae-3a6f-40ef-ac3a-6f85c4a7f87f;9667de53-e43e-47bd-96ff-89c06dc3cdbd
[cb839c8f-72c3-42ac-bf17-b01080cb5705]
Items = ce59717d-fb23-4b7c-8800-25ce613f4042;c30158ae-e2a7-4d1c-9f6c-3b079c2f4c4e;1e6b9963-24cc-41f8-bbee-a23ae761ff81;fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490;5b608840-eb39-4d34-bfdb-8806436d140d;95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40;ba63e2ca-089c-4a95-8e13-81522eed47a0;9faafa35-0688-4529-8310-04f215cb2d0c;c4e5410b-c0fe-4889-8619-6bdce79f0e47;9a4cdb74-34ec-415e-ba36-b8c2a35d0071;bb621a8f-c681-477f-9d15-9c4b53b37a3e;0b6c1459-2fbe-4b2e-95c9-a4f93762fa11;6aff7618-c940-48d9-ad3b-3106d9a884c2;c1e0df66-11ef-4b33-bddb-0cbd13827312;4d690409-f29f-48f4-8967-48fc151b2272;5e558577-7be1-405a-a888-e65d20a2908a;5382eeae-3a6f-40ef-ac3a-6f85c4a7f87f;5af701f6-33e3-4fe6-b15e-b7ef7c986c74;0f0c629a-9524-4fc9-8429-6df7dedf394d;9667de53-e43e-47bd-96ff-89c06dc3cdbd;067a149d-00b4-4ba3-b839-11ab2dbd88c0;bacc9585-ae26-4cf9-8e72-fb520709b4b0;23723ec3-ab86-408a-86c0-f70ac6f5c153;1758dab7-a240-4c66-bd01-0a78064c6f87;45e9c626-06be-40d0-a166-fd5b85471aa8;6cd5ea93-d3e2-4cbd-ac46-9dad6ff62b46;18b62bb5-bd39-4397-9076-fe912a4b6dd0;68aa0e99-9a59-302c-96bb-f4f08e7dd90e;474b7d54-abad-93a8-ad5a-11f9f2cc7ba0;f4fae70f-11d4-7006-8cf3-0f1bf2d6eee8;68898845-2628-5f45-9647-d819ece272a3;2c227485-1738-e3b5-94f6-4f88728cdf91;7b1c83d0-7a0c-df33-8766-21712ba02301;8daa06ee-0a83-8934-aed2-73b25af6bfe9;0869ee05-8a86-9bbc-b610-d7ee3abda81a;093e4d22-dad7-8c72-b4ed-d9e88fef9147;1178dc20-66d9-1597-a9f7-f81f8a83b1f4;13a750f6-fe43-d83a-b3b7-8a7fecebfa77;1a112744-bc68-4f43-886a-a5ed58083a6c;256120fb-a864-c6f4-a6a5-dc023e8ba313;25a634e7-6fc5-d058-a2b9-3f6c70a9b430;25af762a-dce9-9232-8a26-0864839f9b85;26022542-9c88-1ce5-8622-de6dc3823df6;2753bbbf-7530-b3c1-b01a-64b49bcdac8c;278e9dbc-0e9b-bc69-8e44-039c62556527;2864e07e-c7d3-15ef-bb78-ecf0576386a6;2cc4d208-40f8-1fba-8e3a-455d140a6be1;38c53039-21c0-d3f4-9934-00c3bfdca9f9;396b61f1-a203-dfa7-92d6-7dfea7067b9e;4c6d6a9b-920d-0ea6-9a58-d79d93afb1a6;5834b42c-7617-bc1b-bc98-c50a33af774c;62cdf98a-c79b-28e7-a958-d3f7d0caf1ab;6657920d-2c3f-c612-9285-0d0a3ccbb2f9;66fc461d-7a46-9591-997b-42d332fdf941;671dbcb5-16b5-9db3-9e78-45e9f42370bf;695c9824-e3ec-7e1b-9904-d4ef4955047a;6d1a0429-586d-ed7b-9fac-6d91b67116c5;758c8293-ad35-8a3e-8471-ceac85e362fd;78661e58-99f4-a0e7-ba8c-c9aededab5de;7b104f18-a878-dd59-b326-0389e37f086b;8ad75187-213f-dd21-8536-4e93aca03cb5;8ba4ab20-1dcb-e2b5-9f1a-e926b650f8d9;8db372ff-1b90-9239-87d6-1b9bbf4886de;96eb974f-4b54-3958-9b1f-1310189dc93b;9b9b7691-fce2-6d5e-b911-692e2236004f;9ec1bc67-7800-f7b1-aee4-30b357001f6e;a97aaa60-bf83-88a1-a7b1-33e59f73edc1;b0fc7131-b9c1-d70c-82bb-c8893c8a78c2;b5961de7-a547-3171-95a5-63a6487f5b97;b726141b-9a5c-1755-b2dd-47da885ae301;b997558a-f41b-8ce8-8e55-3b2faeed6466;bb5025f0-0079-c342-a36e-e2781257d195;c9d5d40c-bd73-482f-9fdc-15f060a20151;cefa0ab0-0dff-e12a-b497-70a399c0a512;d088d0f1-f39d-aeca-8777-acc35a80f0bc;dc9bc4ac-4482-036a-a651-d0f018889db5;de499d5a-7ffd-f091-8493-e408fc57814b;e8ac9283-7e6f-f665-81ef-78ed0d652eda;f36a0a48-5954-7063-9d55-e4aefe32211c;fb2dc9c7-2669-cbd4-a49b-a9aae2080555;acd47a08-a135-72ed-9378-5054f598b326;8a2b9b37-83e7-a8d9-82cf-0bcbe2070001;8a2b9b37-83e7-a8d9-82cf-0bcbe2070002;8a2b9b37-83e7-a8d9-82cf-0bcbe2070003
[e8c83dac-db4e-4fb5-98a6-61de1998b277]
Items = ce59717d-fb23-4b7c-8800-25ce613f4042;1e6b9963-24cc-41f8-bbee-a23ae761ff81;9a4cdb74-34ec-415e-ba36-b8c2a35d0071;1758dab7-a240-4c66-bd01-0a78064c6f87;bb621a8f-c681-477f-9d15-9c4b53b37a3e;45e9c626-06be-40d0-a166-fd5b85471aa8


星期三, 二月 07, 2007

Tips VBA office 热键的编写方法

Office 的帮助文件一般放在office安装目录下。比如:\OFFICE11\2052\VBAOF11.CHM

VBA里面经常需要把一个热键(VBA里称为shortcutKey)赋予一个宏或一个菜单。

 热键包括组合键盘比如ctrl或alt加上另外一个键来使用。
Ctrl在VBA里表示用^
Alt在VBA里表示用&

http://www.romanpress.com/Articles/Menus_R/Menus.htm

比如把一个热键赋予一个菜单项目.

Dim cbMainMenuBar As CommandBar
Dim iHelpMenu As Integer
Dim cbcCutomMenu As CommandBarControl

Set cbMainMenuBar = _
Application.CommandBars("Worksheet Menu Bar")

Set cbcCutomMenu = _
cbMainMenuBar.Controls.Add(Type:=msoControlPopup)

cbcCutomMenu.Caption = "&Q功能菜单" 'alt+q

星期六, 二月 03, 2007

Tips EXCEL VBA里如何增加菜单及菜单项目风格线

在vbproject ThisWorkbook 里输入以下代码

Sub AddMenus()
Dim cMenu1 As CommandBarControl
Dim cbMainMenuBar As CommandBar
Dim iHelpMenu As Integer
Dim cbcCutomMenu As CommandBarControl

Set cbMainMenuBar = _
Application.CommandBars("Worksheet Menu Bar")

Set cbcCutomMenu = _
cbMainMenuBar.Controls.Add(Type:=msoControlPopup)

cbcCutomMenu.Caption = "&Q功能菜单"

With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "简约方式"
.OnAction = "forcaseGS3"
End With

With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "简约方式MOD"
.OnAction = "forcaseGSMod3"

End With

With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "打印机设置"
.OnAction = "printerSetup"
.BeginGroup = True '在这个菜单前产生一个分割线
End With


End Sub


Sub DeleteMenu()
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("&Q功能菜单").Delete
On Error GoTo 0
End Sub


Private Sub Workbook_Activate()
AddMenus
End Sub


Private Sub Workbook_Deactivate()
DeleteMenu
End Sub