jquery几个的一些有用的小函数:
有了trim这个函数,遇到空格再也不用自己去实现一遍了
$.trim(str)
jQuery Code
$.trim(" hello, how are you? ");
Result:"hello, how are you?"
还在用冗长的脚本去判断当前的浏览器是什么吗?不用了,使用$.browser
$.browser
返回bool,包含的枚举值有 $.browser.safari, opera, msie, mozilla ,
操作数组的一些函数:
$.each和$().each很像,可以吧$.each()看成静态方法,而$().each则是实例方法,$.each()的用法如下:
$.each( [0,1,2], function(i, n)
{ alert( "Item #" + i + ": " + n );});
比较有意思的是下面这种用法:
$.each( { name: "John", lang: "JS" }, function(i, n)
{ alert( "Name: " + i + ", Value: " + n );});
能把属性名i和属性值n打印出来,呵呵,多好的一门动态语言
$.grep() 熟悉linux的开发人员肯定喜欢这个函数,很清晰的用法:
$.grep( [0,1,2], function(i){ return i > 0;});
可以吧$.map()和$.each做个比较,map有返回值,map的方向是根据一个数组的值得到另一个数组,而each你return了也不会有什么不同
$.map( [0,1,2], function(i)
{ return i + 4;});
$.merge()很有用的一个函数,尤其是你在做选择合并的时候
var array = [3,2,1];
$.merge( array, [4,3,2] )
$.extend()这个函数很想一些语言里的类派生的关键字,也确实可以这么用,把这个函数用于对象复制也很好用:
Query Code
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = jQuery.extend({}, defaults, options);
//Result:
settings == { validate: true, limit: 5, name: "bar" }
好好使用jquery提供的这些函数,确实能够给我们带来很大的方便,不要光把玩于一些效果类的插件,实用的才是最好的
posted @
2007-07-03 00:28 sharpedge 阅读(111) |
评论 (0) |
编辑
方便地查阅jquery的相关函数可以访问http://visualjquery.com/1.1.2.html ,他的分类比较好,如图:
posted @
2007-07-02 23:29 sharpedge 阅读(57) |
评论 (0) |
编辑
使用jquery开发也有一段时间了,会了些皮毛。如何在实际工作中代替我们的一些工作,把好的特性用于实践,提高效率呢?今天花些时间把一些东西总结下
主要是比较在传统dom编程和jquery中我们的一些用法,以讨论更好的使用方式
在dom中插入一个新的页面元素,我们通常会:
var div = document.createElement("<div>");
div.innerHTML = "hello";
document.body.appendChild(div);
在jquery中就不用这么麻烦了
一行代码搞定:
$("<div>hello</div>").appendTo("body");
比较基本的也要说下,原来我也疏漏了些:
div.style.display=””; <==> $(div).show();
div.style.display=”none”; <==> $(div).hide();
div.sn = 1 <==> $(div). attr(“sn”,1);
div.style.backgroundColor=’red’ <==> $(div). css( "backgroundColor", "red" );
初始化:
document.body.onload = function(){alert(‘welcome’);};
<==>
$(function(){alert(‘welcome’);});
或者传统的 $(document).ready(function(){alert(‘welcome’);})
时间仓促,明天好好写
posted @
2007-06-28 00:54 sharpedge 阅读(82) |
评论 (0) |
编辑
相比较asp.net中的调试,rails提供的一些特性让我很是喜爱:
ruby script/console
这个脚本可以让应用加载到irb中,方便地测试rails代码,看到这个,我不禁构思起怎么实现个类似的东西给.net用
不需要response.write之类的方法,也不用自己去实现个序列化,rails里可以直接在页面上这样一下,输出标准的html,很是方便
<%=debug(@xxx) %>
posted @
2007-04-27 10:35 sharpedge 阅读(82) |
评论 (1) |
编辑
在ruby第二章里面有一段话:
" This is pretty interesting and important, and so if you weren't
paying attention before, you should probably start now."
讲的就是yield这个关键字所传达的东西,这也是ruby比较有特色的一个地方
输入
def call_block
puts "Start of method"
yield
yield
puts "End of method"
end
call_block { puts "In the block" }
输出:
Start of method
In the block
In the block
End of method
对这个yield的用法,网上说法不一,有的说是占位符,有的说是"让路",有的说是宏
http://www.javaeye.com/topic/31752 http://axgle.javaeye.com/blog/31018 在我这个.net开发者看来,更愿意把他看成是个方法委托,用.net写,可以写成这样
输入
delegate outhandler();
void call_block(outhandler yield)
{
Console.WriteLIne("Start of method");
yield();
yield();
Console.WriteLIne("End of method");
}
void test(){Console.WriteLine("In the block"); }
//调用
call_block(test);
哈哈,上面的代码似乎要比ruby的冗余很多,但是也要严格很多,不知道我这样的分析对不对,不过还是不能完全代替,如果函数中定义一个变量:
def call_block
puts "Start of method"
@count=1
yield
yield
puts "End of method"
end
call_block { puts @count=@count+1 }
输出:
Start of method
2
3
End of method
也就是说这个代理要获得对上下文作用域的访问权,这在.net里恐怕实现不了,这就有点像一个宏了,甚至是代码织入,不过宏好像不能搞方法传递吧。因
此,ruby的yield还是很有特色,看看他使用的一些例子:
输入
[ 'cat', 'dog', 'horse' ].each {|name| print name, " " }
5.times { print "*" }
3.upto(6) {|i| print i }
('a'..'e').each {|char| print char }
输出:
cat dog horse *****3456abcde
嘿嘿,这些实现.net委托都可以搞定,给个函数指针...
posted @
2007-04-03 01:21 sharpedge 阅读(314) |
评论 (1) |
编辑
虎狼之侧,岂容酣睡?
若无虎狼,汝将如何?
虎狼再临,尚能战否?
以前在大学,有如虎狼般追求进步的同伴,促使自己也要努力上进,不敢懈怠。工作以后,没有一个朝夕相处的虎狼作伴,危机感不强,以致倦怠,回来也是打游戏,看新闻,对新技术也是浅尝则止,日渐颓废。这样的日子如果继续,我估计真的就泯然众人矣了...
在没有网上的日子里,反倒静下来看了下书,虽然一向对技术内幕之类的书嗤之以鼻,但还是认真地读着<ASP.NET2.0技术内幕>,毕竟,恢复好的学习习惯更重要,书翻译得不好,但写得还是不错的,认真读,动手多实践,还是有所获的。
今天又可以上网了,网络的浩瀚信息又扑面而来,要努力点学习和思考了,对自己要狠一点
虎狼再临,我必斩之
posted @
2006-09-27 00:12 sharpedge 阅读(85) |
评论 (0) |
编辑
随着不断地建立TestCase,需要管理的测试方法也越来越多,一打开Nunit,就是一个大大的测试树,对自动化测试而言,也许每个方法的说明并不重要,但有时候想测试某一项功能时,如何准确地找到该方法绝对是件头疼的事。我希望对左边的每个树结点都有相应的方法说明以便于我进行查看和管理。
先看看源码吧,我使用的是nunit2.2.7 的源码项目,在代码中,当我们单击左边的树结点时,右边会显示对应得类名和方法名,好,找到这段代码:
private void testTree_SelectedTestsChanged(object sender, SelectedTestsChangedEventArgs e)


{

if (!IsTestRunning)


{

suiteName.Text = e.TestName;

statusBar.Initialize(e.TestCount, e.TestName );

}

}


suiteName就是STOP按钮旁那个显示类名和方法名的label控件,它被赋予了事件参数里测试对象名,我欣喜地发现SelectedTestsChangedEventArgs居然有一个属性是Descripton,于是我把代码改成这样:
suiteName.Text = e.TestName + e.Description;
如何给Description赋值呢,我开始去找对应的地方,希望找到取方法特性的地方,把DescriptionAttribute的值赋给事件参数。然后发现下面这段代码:
private void tests_SelectedTestChanged(UITestNode test)


{

if (SelectedTestsChanged != null)


{

SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs(test.Name, test.CountTestCases(),test.Description);

SelectedTestsChanged(tests, args);

}

}

看来Description参数是由UITestNode对象传递来的,UITestNode实现了ITest接口,而Description正是其属性之一,经过不断地代码跟踪,我找到了给description属性赋值的地方,可是困惑也就在这里开始了。
protected override string GetFixtureDescription( Type fixtureType )


{

if ( parms.HasTestFixtureType )


{

Attribute fixtureAttribute =

Reflect.GetAttribute( fixtureType, parms.TestFixtureType, true );


// Some of our tests create a fixture without the attribute

if ( fixtureAttribute != null )

return (string)Reflect.GetPropertyValue(

fixtureAttribute,

"Description",

BindingFlags.Public | BindingFlags.Instance );

}


return null;

}


TestCase BuildFrom(System.Reflection.MethodInfo method)是类AbstractFixtureBuilder用来根据mehtodinfo构造TestCase对象的,上面代码位于GenericTestFixtureBuilder中,覆写了基类AbstractFixtureBuilder的GetFixtureDescription函数以提供真正的实现。这段代码的作用就是利用反射取出自定义特性对象中Description属性,问题好像一下就明朗了,那么只要我这样写应该就可以显示了吧:
[TestFixture(Description="用作简单测试的素材")]

public class SimpleTestCase


{

[TestAttribute(Description="测试示例方法")]

public void TestSample()


{

}

}


可是当我把程序跑起来时,发现不对啊,显示的Description的值根本就不是我在特性里写的内容,于是我花了不少时间进行耐心的跟踪,希望找到原因,每次发现值到最后的那一步就不是我想要的值了,怎么回事呢?无意中,我查了一下事件参数SelectedTestsChangedEventArgs的类,发现其Description属性返回的值居然不是构造函数里的description参数,不是成员变量description的值,居然是testName!
该类的代码如下:
public class SelectedTestsChangedEventArgs : EventArgs


{

private string testName;

private int count;

private string description=string.Empty;


public SelectedTestsChangedEventArgs(string testName, int count)


{

this.testName = testName;

this.count = count;


}


public SelectedTestsChangedEventArgs(string testName, int count,string description)


{

this.testName = testName;

this.count = count;

this.description = description;

}


public string TestName


{


get
{ return testName; }

}


public int TestCount


{


get
{ return count; }

}


public string Description


{


get
{ return this.testName; }

}

}


原来我是被NUnit给耍了一把,找到问题就好办了,改下Description这个属性:
public string Description


{


get
{ return this.description; }

}


跑下程序,终于显示出我想要的结果,为了显示得好看点,我把原来的label换成了两个TextBox。最后的显示效果如下:

在后面的文章中,我会对NUnit进行进一步的改造和整合^_^
posted @
2006-03-25 18:52 sharpedge 阅读(1416) |
评论 (5) |
编辑
很久以前就买了<microsoft .net remoting>这本书,以前也有努力看过,也许是不够耐心,一直都没有看完,现在有些时间了,争取把这本书读完,彻底搞懂remoting的机制,可以在项目中用到更深层次的东西,也是对自己的一种鞭策吧 ,不然每天都游戏,工作上也学不到太多东西.
今天把第5章看完了,也算有些收获吧 ,看能不能在项目中用改造代理类的方式实现分布式服务的负载均衡,好好沉淀沉淀.
AOP在.net平台上的实现都是在remoting架构下的一些应用,都涉及到处理消息链,看项目中能不能用上
posted @
2006-03-18 14:40 sharpedge 阅读(327) |
评论 (2) |
编辑