blogjava-凯发k8网页登录
blogjava-凯发k8网页登录http://www.blogjava.net/bluedavy/category/8127.html不懂理论只懂实战的粗人。
zh-cntue, 27 feb 2007 12:15:00 gmttue, 27 feb 2007 12:15:00 gmt60- 两个小问题备忘以及继续谈交互http://www.blogjava.net/bluedavy/archive/2006/09/06/68114.htmlbluedavybluedavywed, 06 sep 2006 12:10:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/09/06/68114.htmlhttp://www.blogjava.net/bluedavy/comments/68114.htmlhttp://www.blogjava.net/bluedavy/archive/2006/09/06/68114.html#feedback3http://www.blogjava.net/bluedavy/comments/commentrss/68114.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/68114.html备忘javascript清空表格中行的问题;
备注动态创建的radio按钮无法选中的问题。
]]> - velocity for javascripthttp://www.blogjava.net/bluedavy/archive/2006/04/10/40334.htmlbluedavybluedavymon, 10 apr 2006 14:19:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/04/10/40334.htmlhttp://www.blogjava.net/bluedavy/comments/40334.htmlhttp://www.blogjava.net/bluedavy/archive/2006/04/10/40334.html#feedback2http://www.blogjava.net/bluedavy/comments/commentrss/40334.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/40334.html做过ajax应用的人都知道,在js端将后台的数据进行展示其实是一件挺麻烦的事,尽管操作dom不算太麻烦,但要和写一段html相比来说就显得太麻烦,而且难以维护了,所以我目前在做实现的时候不得已的采用在后台通过java velocity模板的方式来生成html,再返回前端js,由其负责将html放入相应的container进行显示,在目前来看这种做法还算过得去,不过其实一种比较期盼的都是能有一个velocity for javascript版,这样我就可以直接把数据模型返回给js,在js端结合velocity模板直接渲染生成最后的显示效果了,那就比较爽了,^_^
不过目前开源界好像没这样的东西呢,前几天在javaeye上看到有人推荐这个东西(),很不错,是个javascript template的支持的东西,^_^,它支持的就是类似velocity的方式,不过它不能支持引入外部文件的方式,也就是说和我所期待的velocity for js还是不太一样的,不过有了这东西的话我想要实现一个velocity for js也不是什么太难的事,呵呵,想像的方案,^_^:
1、后台请求在返回时返回数据以及模板文件;
2、结合javascripttemplatesyntax,将数据与模板文件进行合并,渲染生成html;
或者另外的方案是先返回数据,然后根据数据的情况来决定需要采用什么样的模板文件,之后通过xmlhttp发起同步请求,从服务器获取模板文件,觉得这个方案容易造成发起多次请求,有些浪费网络资源,不过也会有它的适用场景...
^_^,一个简单的思路就是这样,当然,需要提供些更为强大的功能...
]]> - js版事件管理器 v0.7http://www.blogjava.net/bluedavy/archive/2006/03/29/38075.htmlbluedavybluedavywed, 29 mar 2006 08:17:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/03/29/38075.htmlhttp://www.blogjava.net/bluedavy/comments/38075.htmlhttp://www.blogjava.net/bluedavy/archive/2006/03/29/38075.html#feedback0http://www.blogjava.net/bluedavy/comments/commentrss/38075.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/38075.html1、增加了事件参数传递的支持;
2、增加了事件、拦截器的有效范围定义的支持;
3、增加了事件、拦截器的清除的支持。
]]> - js版事件管理器http://www.blogjava.net/bluedavy/archive/2006/03/09/34482.htmlbluedavybluedavythu, 09 mar 2006 07:29:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/03/09/34482.htmlhttp://www.blogjava.net/bluedavy/comments/34482.htmlhttp://www.blogjava.net/bluedavy/archive/2006/03/09/34482.html#feedback0http://www.blogjava.net/bluedavy/comments/commentrss/34482.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/34482.html阅读全文
]]> - 修改版的丰富交互表格richtable.jshttp://www.blogjava.net/bluedavy/archive/2006/03/06/33887.htmlbluedavybluedavymon, 06 mar 2006 09:07:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/03/06/33887.htmlhttp://www.blogjava.net/bluedavy/comments/33887.htmlhttp://www.blogjava.net/bluedavy/archive/2006/03/06/33887.html#feedback2http://www.blogjava.net/bluedavy/comments/commentrss/33887.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/33887.html阅读全文
]]> - javascript基础知识之this篇http://www.blogjava.net/bluedavy/archive/2006/03/02/33285.htmlbluedavybluedavythu, 02 mar 2006 12:25:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/03/02/33285.htmlhttp://www.blogjava.net/bluedavy/comments/33285.htmlhttp://www.blogjava.net/bluedavy/archive/2006/03/02/33285.html#feedback1http://www.blogjava.net/bluedavy/comments/commentrss/33285.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/33285.html一个简单的测试,为了绑定事件到一个按钮上:
<script src="prototype.js">script>
<input type=button name=btntest value=测试>
<script>
var testthis=class.create();
testthis.prototype={
initialize:function(btn){
this.value="testthis";
$(btn).onclick=this.clickbutton;
}
clickbutton:function(){
alert(this.value);
}
}
new testthis("btntest");
script> 在ie中执行代码会发现点击按钮后弹出的提示的值为"测试",按照java的思想去看的话我们会觉得这是很奇怪的事,因为按照java执行的话这个时候一定是弹出"testthis"...
那么为什么会发生这样的状况呢,其实就是在将按钮的onclick事件绑定到clickbutton造成的,当事件发生时候当前的对象为button,而不是testthis,自然这个时候的this也就是button了...
有些时候我们是不希望这样的,在拥有prototype的情况下我们可以用它提供的bind来解决,将上面的绑定按钮的onclick事件部分的代码改为:
$(btn).onclick=this.clickbutton.bind(this);
再次执行后会发现这个时候点击按钮弹出的提示的值就变为"testthis"了,呵呵,其实就是prototype帮忙将这个时候的参数进行了重新的绑定..
bind和extend是prototype中两个非常重要的方法,去看prototype.js就会发现,里面很多地方都用到了object.extend和function.prototype.bind这两个函数...
bind可以起到的作用就象我上面说的..
extend起到的作用则为继承和扩展,^_^
]]> - prototype.js学习http://www.blogjava.net/bluedavy/archive/2006/02/28/32882.htmlbluedavybluedavytue, 28 feb 2006 10:01:00 gmthttp://www.blogjava.net/bluedavy/archive/2006/02/28/32882.htmlhttp://www.blogjava.net/bluedavy/comments/32882.htmlhttp://www.blogjava.net/bluedavy/archive/2006/02/28/32882.html#feedback4http://www.blogjava.net/bluedavy/comments/commentrss/32882.htmlhttp://www.blogjava.net/bluedavy/services/trackbacks/32882.html1、类的创建
prototype.js已经封装好了,这个很简单。
var person=class.create(); 这样就创建了一个person类,这个person类必须提供initialize方法的实现:
person.prototype={
initialize:function(){
}
}; 对比java,class.create相当于class.forname(),initialize相当于构造器,和java的构造器一样,可以自定义为带参数性质的。
可以看到在使用这样的方式定义class后,它和javascript原来的通过function方式来定义一个类就有明确的区分了,在这种情况下我们就可以用class.create来定义类,用function来直接定义函数。
类通常还涉及静态成员(static性质的)和实例成员(需要实例化才可调用)的定义。
在javascript中这点也非常容易:
静态成员:
var person={
name:'person',
getname:function(){return 'person'}
}; 实例成员:
person.prototype={
childname:'child',
eat:function()
} 上面的person.getname是可以直接这么调用的,但eat方法则需通过var person=new person();person.eat();的方式来调用。
2、类的继承
类的继承其实javascript本身就支持的,不过prototype提供了一种另外的方法。
按照javascript的支持的实现:
var student=class.create();
student.prototype=new person(); 这样就实现了student继承至person。
在使用prototype的情况下可以这么实现:
var student=class.create();
object.extend(student.prototype,person.prototype); 子类要增加方法时可使用
student.prototype.study=function(){}; 或
object.extend(student.prototype,{
study:function(){}
}); 3、事件机制(对类方法执行的监听和观察)
在事件机制上则碰到了一些疑惑,作为事件机制主要需要提供事件的定义,对于事件的监听以及对于事件的观察。
在javascript中事件需要以on开头,也就是作为事件就需要采用onclick这样类似的命名:
对上面的student增加一个对外的事件,如:
student.prototype.study=function(){
this.onstudy();
}
student.prototype.onstudy=function(){}; 这个onstudy就是交给相应的实例去实现的,例如实例采用这样的方式:
function studythis(){
alert("study this");
}
var student=new student();
student.onstudy=studythis(); 对于事件通常都希望进行监听和观察,根据prototype提供的bindaseventlistener以及observe,这么进行了尝试:
study.onstudy=watchstudy.bindaseventlistener(this);
function watchstudy(event){
alert("watch study");
} 按照事件机制来说,在执行study的时候应该可以看到study this和watch study两个提示,但最后执行后只能看到watch study的提示,这是为什么呢?按照listener的概念的话,不应该覆盖原有方法的,不过我看了一下prototype.js的源代码,按照上面的编写方式确实会照成覆盖原方法。
observe是这么尝试的:
event.observe(study,'study',watchstudy,false);
按照观察机制来说,应该在执行study的时候会看到两个提示,但最后执行后这行根本就没起到任何作用。
这是为什么呢?
]]>