catch (e) {} 41 } 42 43 return false; 44}
在线评论预览与评论的提交
结合blog.js与User controls\CommentView.ascx,我们看一下它的处理过程。CommentView可以显示文章的评论列表和提交新评论。当点击Preview时,会调用blog.js中的ToggleCommentMenu:
评论的预览与提交
1// Shows the preview of the comment 2function ToggleCommentMenu(element) 3{ 4 element.className = ''selected''; 5 if (element.id == ''preview'') 6 { 7 $(''compose'').className = ''''; 8 $(''commentCompose'').style.display = ''none''; 9 $(''commentPreview'').style.display = ''block''; 10 $(''commentPreview'').innerHTML = ''<img src="'' + KEYwebRoot + ''pics/ajax-loader.gif" alt="Loading" />''; 11 var argument = $(''commentPreview'').innerHTML; 12 AddComment(true); 13 } 14 else 15 { 16 $(''preview'').className = ''''; 17 $(''commentPreview'').style.display = ''none''; 18 $(''commentCompose'').style.display = ''block''; 19 } 20} 21 22function EndShowPreview(arg, context) 23{ 24 $(''commentPreview'').innerHTML = arg; 25} 26 27function AddComment(preview) 28{ 29 var isPreview = preview == true; 30 if (!isPreview) 31 { 32 $("btnSaveAjax").disabled = true; 33 $("ajaxLoader").style.display = "inline"; 34 $("status").className = ""; 35 $("status").innerHTML = KEYsavingTheComment; 36 } 37 38 var author = nameBox.value; 39 var email = emailBox.value; 40 var website = websiteBox.value; 41 var country = countryDropDown ? countryDropDown.value : ""; 42 var content = contentBox.value; 43 var notify = $("cbNotify").checked; 44 var captcha = captchaField.value; 45 46 var callback = isPreview ? EndShowPreview : AppendComment; 47 var argument = author + "-|-" + email + "-|-" + website + "-|-" + country + "-|-" + content + "-|-" + notify + "-|-" + isPreview + "-|-" + captcha; 48 49 WebForm_DoCallback(''ctl00$cphBody$CommentView1'',argument, callback,''comment'',null,false); 50 51 if (!isPreview && typeof OnComment != "undefined") 52 OnComment(author, email, website, country, content); 53} 54
请注意isPreview的引入与它的逻辑,这个Preview实际上也是需要回调到服务器端的程序的,之后生成预览的Render,当点击Save时isPreview为false,这时回调服务器端的代码时才真正的保存,然后浏览器回调客户端的AppendComment完成一些初始化工作。CommentView是一个UserControl并实现了ICallbackEventHandler接口,这个接口有两个方法GetCallbackResult和RaiseCallbackEvent,在RaiseCallbackEvent中我们可以看出,提交的评论参数使用"-|-"作为分隔符,经过一系列处理最后将这个新评论的呈现给了_Callback,_Callback由GetCallbackResult返回。浏览端使用WebForm_DoCallback(''ctl00$cphBody$CommentView1'',argument, callback,''comment'',null,false);在这部分里我们只要实现ICallbackEventHandler接口就行了,实现的细节都已经有.Net提供了,感兴趣细节的朋友可以查一查Asp.Net的回调方面的资料。
Widget排序的实现
当我们用鼠标拖住一个Widget移动到某个位置再放开鼠标 |