发布和订阅消息

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.开头的所有消息。

代码完成以后,我们来刷新页面,然后点击按钮,这个时候控制台显示如下:

这是我们通过代码来实现的消息发布和订阅,除此之外,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学习笔记03:Ext.Net MessageBus用法的更多相关文章

  1. 【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局

    Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的 ...

  2. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解

    Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...

  3. 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)

    GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之 ...

  4. 【Ext.Net学习笔记】05:Ext.Net GridPanel的用法(包含Filter、Sorter、Grouping、汇总(Summary)的用法)

    GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: <ext:GridPanel runat="server&qu ...

  5. 【Ext.Net学习笔记】04:Ext.Net中使用数据、Ext.Net Store的用法、Ext.Net ComboBox用法

    之前的几篇文章都是介绍Ext.Net较为基础的东西,今天的这一篇将介绍数据的一些用法,包括XTemplate绑定数据.Store(Modal.Proxy).ComboBox的用法等. XTemplat ...

  6. 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net

    Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite. 下载地址:http:// ...

  7. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

  8. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...

  9. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

随机推荐

  1. LoadRunner 参数化详解

    可能稍微对LR 有些了解的人都知道LR 参数化的功能,今天请跟我来一起好好理一下. 首先,咱们先说一下为啥要用参数化?假如您录制了一个登录的脚本,如下所示, web_submit_form(" ...

  2. 五指CMS发布1.4版本,更多的新功能

    五指cms v1.4变更: 新增内容手动分页新增百度地图新增订单管理模块新增订单地址管理增加Microsoft YaHei字体新增推广邀请模块新增私密下载,下载函数 新增百度地图新增筛选功能 修正全局 ...

  3. c++面试常见160问

    1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"?答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其 ...

  4. HDOJ-ACM1010(JAVA) 奇偶剪枝法 迷宫搜索

    转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5568822.html 第一次遇到迷宫搜索,给我的感觉是十分惊喜的:搞懂这个的话,感觉自己又掌握了一项技能~ 个人 ...

  5. C 数据结构1——线性表分析(顺序存储、链式存储)

    之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...

  6. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  7. Asp.net多行文本框随内容增加而高度增加

    最近做一个项目,在一个多行文本框(TextBox)里显示新闻内容,由于内容有多有少,并且总是出现垂直滚动条,很不好看,笔者就想用一个法子,去掉垂直滚动条,并且文本框的高度随内容的增加而变大,使高度适应 ...

  8. A Tour of Go The new function

    The expression new(T) allocates a zeroed T value and returns a pointer to it. var t *T = new(T) or t ...

  9. light oj 1148 - Mad Counting

    1148 - Mad Counting   PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB M ...

  10. oracle中使用sql查询时字段为空则赋值默认

    转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...