Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]
在去年的CS1.x專題中,我用了大部分的時間去討論CS底層的結構與運行機制.在接下來的CS2.0系列文章中我將專著細節.來分析CS2.0的一些部件的實現.
?
CS1.0與2.0有些變化,但是運行機制變化不大,變化的只是細節與增加的功能.
細節的第一篇,我們從一個按鈕開始說起:
?
上面的“郵件提醒”按鈕是在CS2.0論壇模塊里的一個具體帖子左上角出現的。該按鈕不是一般的按鈕,有圖片并且還有文字(這個文字不是圖片中的一部分那么簡單,文字會根據xml的資源文件的不同而替換不同的語言),另外點擊按鈕還會通過Ajax回調一個服務器端方法,實現無刷新操作。
首先要明白的是,該按鈕不是繼承自Button,而是一個自定義控件。在CommunityServer.Controls項目,找到Utility文件夾下的ThreadSubscribeLinkButton.cs類。這就是該按鈕的實現了。
public class ThreadSubscribeLinkButton : HtmlAnchor, ITrackedThread
該Button是繼承了HtmlAnchor(就是HTML 的<a>)與 ITrackedThread。
ITrackedThread接口定義很簡單:
public interface ITrackedThread
??? {
??????? bool IsTracked { get;set;}
??????? int ThreadID { get;set;}
??????? bool Visible { get;set;}
??? }
三個屬性,分別是“是否已經跟蹤”、“被跟蹤的線索ID”、“是否可見”?,這里說明一下thread這個單詞在CS 中的解釋:首先,一個論壇下的一個Post(我們一般叫帖子),發表后就會有一個thread,這個線索包括了Post本身,還包括針對該Post的回復等等。Post和其回復就形成了一個thread。
我們回到ThreadSubscribeLinkButton.cs類看一些重要的屬性:
public virtual bool UseImages
public virtual string TrackingResourceName
public virtual string NotTrackingResourceName
public virtual string WorkingResourceName
?
由于CS是提供多種語言支持,所有想要替換按鈕上的文字就需要這些屬性了。同時,如果要顯示在不同的操作狀態,如:在處理的時候顯示一個漏沙圖標 ,還有在處理完成后要顯示一個完成的圖標 。這些都需要上述屬性的支持。另外,我們可以看出這些屬性是可以重寫的。
接下來在類中還有幾個重要的方法:
protected override void OnLoad(EventArgs e)
這是最早激發的一個事件實現,在CreateChildControls之前。在這里我們可以看到為該類為頁面注冊了一個Ajax方法:
AjaxManager.Register(this,this.GetType().Name,true,AjaxDebug.None);
(關于Ajax類這次細節分析暫時忽略)
?
protected override void CreateChildControls()
在OnLoad之后就建立控件內容,內容主要包括一些js腳本的,并且根據IsTracked的值判斷按鈕應該顯示的文字和圖片。
?
protected override void OnPreRender(EventArgs e)
在建立控件內容后,就觸發預呈現的OnPreRender事件。在該方法下,主要根據UseImages的值判斷調用下面兩個方法中的哪一個。
private void BuildCallbackScript()
private void BuildCallbackScriptWithImages()
這兩個私有方法,構造Ajax回調的腳步。
?
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public bool ToggleEmailReplies(int threadID)
這是Ajax回調的方法,也就是說當點擊按鈕后,會通過js 通過xmlhttp調用該方法。
ThreadTracking.ReverseThreadTrackingOptions(threadID, context.User.UserID);
通過上面的調用,最終把值保存到數據庫。ToggleEmailReplies方法最后返回一個bool變量,客戶端的js腳本就會根據這個bool值變化按鈕的文字與圖片。
?
轉載于:https://www.cnblogs.com/guodapeng/archive/2007/12/21/1009058.html
總結
以上是生活随笔為你收集整理的Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP安全配置
- 下一篇: 原来,07年我把自己给和谐了