亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【Ext.Net學習筆記】02:Ext.Net用法概覽、Ext.Net MessageBus用法、Ext.Net布局

2019-11-17 01:33:43
字體:
來源:轉載
供稿:網友

【Ext.Net學習筆記】02:Ext.Net用法概覽、Ext.Net MessageBus用法、Ext.Net布局

Ext.Net用法概覽

Ext.Net還是很強大,如果運用熟練可以極大的提高編程效率。如果你也要學習Ext.Net,原文博主推薦書籍:《Ext.Net Web 應用程序開發教程》,是英文的,有基礎的可以看下,可以百度到PDF文檔的。

Ext.Net與ExtJS代碼比較

上一篇中我們創建了一個使用Ext.Net創建了一個window窗口,代碼非常簡單:

<ext:Window runat="server"    ID="win"    Title="示例窗口"    Width="300"    Height="200"    AutoShow="true"></ext:Window>

如果我們使用ExtJS代碼來創建這個窗口,代碼會是什么樣的呢?請看下面:

Ext.create("Ext.window.Window", {    id:"win2",    title: "示例窗口2",    height: 200,    width: 300,    autoShow: true});

看這兩段代碼是不是很像,Ext.Net只是將ExtJS的配置屬性進行了封裝,作為空間的屬性,可以在Visual Studio中進行非常友好的智能提示,效率提升不止一倍啊。

另外,Ext.Net還支持控件的嵌套定義,跟ExtJS中的items配置項、buttons配置項一樣,請看下面的代碼:

<ext:Window runat="server"    ID="win"    Title="示例窗口"    Width="300"    Height="200"    Layout="FitLayout"    AutoShow="true">    <Items>        <ext:FormPanel runat="server" ID="extForm" BodyPadding="5">            <Items>                <ext:TextField runat="server" ID="txtName" FieldLabel="姓名"></ext:TextField>                <ext:NumberField runat="server" ID="txtAge" FieldLabel="年齡"></ext:NumberField>            </Items>            <Buttons>                <ext:Button runat="server" ID="btnSave"                    Icon="DatabaseSave" Text="保存">                </ext:Button>            </Buttons>        </ext:FormPanel>    </Items></ext:Window>

這仍然是我們的window,新的效果如下(未配置ExtJs皮膚,為默認皮膚):

Ext.Net的事件處理

Ext.Net中的事件分為客戶端事件和服務器端事件,客戶端事件需要頁面中JS來處理,服務器端事件則會無刷新的提交給服務器,在服務器處理完成并將結果顯示在頁面中。

拿我們上面窗口中的保存按鈕為例,我們來介紹一下如何處理客戶端事件。

客戶端事件處理

首先,我們來添加一個客戶端的單擊事件:

<ext:Button runat="server" ID="btnSave"    Icon="DatabaseSave" Text="保存">    <Listeners>        <Click Handler="Ext.MessageBox.alert('提示', '保存按鈕被單擊')" />    </Listeners></ext:Button>

跟ExtJS中的寫法一樣,使用listeners來添加事件。當我們在Listeners標簽中輸入左尖括號以后,visual studio 會提示我們所有可用的事件:

這種編程方式實在是太快了,效率完全可以達到ExtJS熟練的水平(題外話,套用一句廣告詞:根本停不下來&hellip;…)。

上面代碼的按鈕事件效果如下:

Handler 屬性保存一段JS代碼,如果要添加一個處理方法,則需要使用Fn屬性:

<ext:Button runat="server" ID="btnSave"    Icon="DatabaseSave" Text="保存">    <Listeners>        <Click Fn="fnSave" />    </Listeners></ext:Button>

注意,使用Fn屬性的時候,需要確保我們的頁面中已經定義了fnSave方法,不然界面不會顯示出來,使用開發者工具,會發現有fnSave未定義的錯誤:

function fnSave() {    //此處添加保存的處理邏輯    Ext.MessageBox.alert('提示', '保存按鈕被單擊')}

代碼效果和上面的效果一樣,此處只使用了click事件,完整是事件列表可以參考ExtJS API文檔。

服務器端事件處理

既然使用了Ext.Net服務器控件,恐怕大家更希望使用服務器端事件吧。Ext.Net服務器事件需要在DirectEvents中定義,它是Ext.Net獨有的。DirectEvents將被回發到服務器進行處理,并將處理結果展示在頁面中(如果有更新頁面的話)。

來看一下DirectEvents

<ext:Button runat="server" ID="btnSave"    Icon="DatabaseSave" Text="保存">    <DirectEvents>        <Click OnEvent="btnSave_DirectClick"></Click>    </DirectEvents></ext:Button>

對應的服務器處理方法如下(需要引用,using Ext.Net;):

PRotected void btnSave_DirectClick(object sender, DirectEventArgs e){    X.MessageBox.Alert("提示", "保存按鈕被單擊").Show();}

如果我們需要在執行服務器端處理的時候顯示遮罩層,可以在Click中添加配置節點:

<ext:Button runat="server" ID="btnSave"    Icon="DatabaseSave" Text="保存">    <DirectEvents>        <Click OnEvent="btnSave_DirectClick">            <EventMask ShowMask="true" Msg="正在加載..." />        </Click>    </DirectEvents></ext:Button>

加載頁面如下,加載完成后彈出窗口,效果與前面的一樣

另外,Ext.Net Direct Events還可以傳遞自定義參數:

<ext:Button runat="server" ID="btnSave"    Icon="DatabaseSave" Text="保存">    <DirectEvents>        <Click OnEvent="btnSave_DirectClick">            <ExtraParams>                <ext:Parameter Name="param1" Value="自定義參數值" />            </ExtraParams>            <EventMask ShowMask="true" Msg="正在加載..." />        </Click>    </DirectEvents></ext:Button>

在服務器端的處理方法中,我們可以輕易的獲取到這個參數值:

protected void btnSave_DirectClick(object sender, DirectEventArgs e){    string param1 = e.ExtraParams["param1"];    X.MessageBox.Alert("提示", "保存按鈕被單擊,傳入的參數值:" + param1).Show();}

代碼效果如下:

Ext.Net中的DirectEvents所支持的事件類型同樣可以參考ExtJS的API文檔。

Ext.Net MessageBus用法

發布和訂閱消息

Ext.Net MessageBus 的本質是一個消息訂閱機制,ExtJS中沒有這種機制,所以MessageBus的Ext.Net實現的,但并不是原創,這種功能在dojo中早就實現了,可以參見原文博主的博客:Dojo入門:dojo中的事件處理

下面的代碼將演示如何使用 MessageBus 發布和訂閱消息:

<ext:Button runat="server" ID="btn2" Text="發布消息" Handler="fnButtonHandler"></ext:Button>

首先定義了一個按鈕,這個按鈕單擊的時候將會執行fnButtonHandler方法,我們在這個方法中發布消息:

function fnButtonHandler() {    Ext.net.Bus.publish("Custom.Event1", { item: this });}

Ext.net.Bus.publish方法的第一個參數是消息名稱,第二個參數是消息的參數。

接下來我們來訂閱這個消息:

Ext.onReady(function () {    Ext.net.Bus.subscribe("Custom.*", function () {        console.log(arguments);    });});

在onReady事件中,添加對消息Custom.*的訂閱,這里使用了通配符,表示訂閱Custom.開頭的所有消息。

代碼完成以后,我們來刷新頁面,然后點擊按鈕,這個時候控制臺顯示如下(這里用的是火狐瀏覽器,開發者工具是FireBug):

這是我們通過代碼來實現的消息發布和訂閱,除此之外,Ext.Net還允許通過控件來發布和訂閱消息。

通過控件發布和訂閱消息

我這里通過一個現成的例子來演示:

<ext:Panel ID="Panel1"    runat="server"    Title="MessageBus Event Logger"    Width="400"    Height="300"    AutoScroll="true">    <MessageBusListeners>        <ext:MessageBusListener            Name="App.*"            Handler="this.body.createChild({            html: 'Received event from ' + data.item.id,            tag: 'p'            });" />    </MessageBusListeners>    <Buttons>        <ext:Button ID="Button1" runat="server" Text="Publish event 1">            <Listeners>                <Click BroadcastOnBus="App.event1" />            </Listeners>        </ext:Button>    </Buttons></ext:Panel>

在這段代碼中,我們通過按鈕的click事件來發布消息,控件panel則訂閱了這個消息,效果如下:

點擊前:

點擊后:

服務器端的消息發布和訂閱處理

上面的演示都是在客戶端完成的,接下來這個就厲害了,在服務器端的消息發布和訂閱,請看代碼:

<ext:Button runat="server" ID="btnPublish" Text="消息發布者"    OnDirectClick="btnPublish_DirectClick"></ext:Button><ext:Button runat="server" ID="btnSubscribe" Text="消息訂閱者">    <MessageBusDirectEvents>        <ext:MessageBusDirectEvent            Name="App.*"            OnEvent="subscribe_Event">        </ext:MessageBusDirectEvent>    </MessageBusDirectEvents></ext:Button>

首先是兩個按鈕,一個用來發布消息,一個來訂閱消息。

在消息發布者按鈕中, 我們使用了OnDirectClick事件,這是一個服務器端處理的事件,是Direct Click事件的簡寫。

在訂閱者按鈕中,我們添加了訂閱的相關配置,并通過事件處理方法subscribe_Event來處理訂閱到的消息,服務器端的相應代碼如下:

protected void btnPublish_DirectClick(object sender, Ext.Net.DirectEventArgs e){    Ext.Net.MessageBus.Default.Publish("App.Server");}protected void subscribe_Event(object sender, Ext.Net.DirectEventArgs e){    X.MessageBox.Alert("提示", "接收到來自服務器的消息,消息名稱:" + e.Name).Show();}

重新編譯代碼,然后刷新我們的頁面。當點擊消息發布按鈕時,我們會接收到服務器端的消息:

有心的朋友想想這段代碼的執行過程吧。

1.觸發服務器端的按鈕點擊,在按鈕點擊事件中發布消息,并將消息在客戶端發布

2.客戶端訂閱者按鈕接收到消息的發布

3.訂閱者按鈕將消息發送到服務器端進行處理

Ext.Net MessageBus可以方便的完成消息發布和訂閱機制,并能夠在前臺和后臺代碼中結合使用。

Ext.Net布局

ExtJS中的布局功能很強大,常用的布局有border、accordion、fit、hbox、vbox

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91成人福利在线| 久久久国产精品亚洲一区| 日韩激情在线视频| 久久成人精品一区二区三区| 97视频在线观看免费| 庆余年2免费日韩剧观看大牛| 亚洲国产日韩精品在线| 日本午夜精品理论片a级appf发布| 亚洲一区二区三区成人在线视频精品| 国产精品电影在线观看| 国产福利成人在线| 久久久久久久久久国产| 综合欧美国产视频二区| 美日韩丰满少妇在线观看| 亚洲一区美女视频在线观看免费| 精品亚洲国产视频| 亚洲一区精品电影| 日本精品久久中文字幕佐佐木| 日韩h在线观看| 国产精品黄色av| 久久久久久久久久国产精品| 成人高清视频观看www| 亚洲精品第一国产综合精品| 欧美黑人巨大精品一区二区| 91老司机精品视频| 亚洲国产精品高清久久久| 精品成人69xx.xyz| 精品性高朝久久久久久久| 成人黄色片在线| 亚洲第一区中文99精品| 欧美在线视频观看| 一本色道久久综合亚洲精品小说| 伊人久久大香线蕉av一区二区| 中文日韩电影网站| 国产精品久久久久av| 久久99热精品这里久久精品| 国产亚洲免费的视频看| 日韩**中文字幕毛片| 亚洲欧美在线一区二区| 亚洲成人久久久久| 中文字幕在线看视频国产欧美| 欧美精品一区二区三区国产精品| 26uuu日韩精品一区二区| 久久这里有精品| 97免费中文视频在线观看| 性欧美亚洲xxxx乳在线观看| 亚洲自拍偷拍第一页| 午夜精品国产精品大乳美女| 日韩av最新在线观看| 欧美有码在线视频| 精品国内自产拍在线观看| 亚洲欧美一区二区精品久久久| 欧美极品在线播放| 欧美日韩亚洲网| 欧美成人小视频| 欧美激情国内偷拍| 亚洲天堂av在线播放| 日韩在线观看免费av| 国产成人91久久精品| 51午夜精品视频| 亚洲国产精品美女| 色综合天天综合网国产成人网| 久99久在线视频| 久久综合伊人77777蜜臀| 亚洲美女av在线播放| 奇门遁甲1982国语版免费观看高清| 亚洲欧美国产va在线影院| 精品自在线视频| 亚洲第一区在线观看| 欧美xxxx做受欧美.88| 美女扒开尿口让男人操亚洲视频网站| 欧美一区二区三区四区在线| 一区二区欧美在线| 国产日韩av在线播放| 国产美女主播一区| 亚洲视频在线观看网站| 亚洲黄在线观看| 日韩亚洲第一页| 亚洲一区二区自拍| 日韩欧美精品在线观看| 91精品国产99久久久久久| 少妇高潮久久77777| 亚洲欧美综合区自拍另类| 91色p视频在线| 欧美一级黄色网| 国产精品福利久久久| 欧美一区二区大胆人体摄影专业网站| 亚洲国产天堂久久综合| 日韩视频免费中文字幕| 欧美一级淫片播放口| 欧美日韩在线视频一区| 久久久久久久久久久网站| 国产精品久久久久高潮| 久久福利网址导航| 亚洲美女www午夜| 成人午夜激情网| 成人av在线亚洲| 亚洲va久久久噜噜噜久久天堂| 久久久久久高潮国产精品视| 国外色69视频在线观看| 久久综合免费视频影院| 亚洲视频综合网| 色多多国产成人永久免费网站| yellow中文字幕久久| 亚洲精品国产拍免费91在线| 国产精品劲爆视频| 久久影视免费观看| 国产成人自拍视频在线观看| 午夜精品久久久久久久99热浪潮| 国产精品va在线播放| 国产精品成av人在线视午夜片| 精品一区二区三区三区| 伊人久久五月天| 亚洲精选在线观看| 欧美激情手机在线视频| 国产美女久久精品香蕉69| 国产久一一精品| 亚洲成色www8888| 欧美国产日韩视频| 欧美在线视频一区| 亚洲美女动态图120秒| 久久激情五月丁香伊人| 日韩在线视频免费观看高清中文| 午夜精品视频在线| 日韩欧美精品免费在线| 国产精品99导航| 日韩欧美在线看| 91久久精品美女高潮| 国产精品爱啪在线线免费观看| www.美女亚洲精品| 亚洲国产天堂久久国产91| 成人欧美一区二区三区黑人孕妇| 欧美激情xxxxx| 久久精品福利视频| 国产精品久久久91| 欧美亚洲国产日韩2020| 成人激情在线播放| 精品久久久久久久大神国产| 欧美丝袜美女中出在线| 国产精品网址在线| 欧美精品久久久久久久久久| 欧美日韩在线一区| 欧美在线性视频| 精品美女国产在线| 久久久国产精品一区| 亚洲欧美国产视频| 91亚洲国产成人久久精品网站| 日韩在线资源网| 亚洲国产欧美一区二区三区同亚洲| 91久久国产精品91久久性色| 精品久久中文字幕久久av| 欧美色视频日本高清在线观看| 亚洲一区二区免费在线| 97在线视频国产| 久久亚洲精品一区二区| 亚洲欧洲xxxx| 日韩极品精品视频免费观看| 5566成人精品视频免费| 国产欧美一区二区| 亚洲天堂av网| 久久免费国产视频| 精品亚洲精品福利线在观看| 精品欧美激情精品一区| 2021久久精品国产99国产精品|