Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657415
  • 博文数量: 171
  • 博客积分: 2246
  • 博客等级: 大尉
  • 技术积分: 1574
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 11:45
文章分类

全部博文(171)

文章存档

2018年(3)

2017年(4)

2015年(1)

2014年(20)

2013年(57)

2012年(86)

分类: Web开发

2014-02-17 17:43:07



发布一个事件给一个主题的所有订阅者。发布者被作为基础dojo( dojo.js的)的一部分,因此不需要额外的要求。

介绍
dojo.publish作为topic相关的三个函数之一,被用在应用程序中publish(broadcast?)任何类型的信息,被同一个通道的其他函

数接收。通道是任何形式的任何字符串。此外,像其他的Dojo事件函数,一个dojo.unsubscribe函数被用来断开订阅通道的。

示例
简单的主题

监听听一个名为“foobar ”的数据通道:

// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
  connect.subscribe("foobar", function(message){
    console.log("I got: ", message);
  });
});
// Dojo < 1.7
dojo.subscribe("foobar", function(message){
    console.log("I got: ", message);
});

将信息发布到该通道:

// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
  connect.publish("foobar",  [{item:"one", another:"item", anObject:{ deeper:"data" }}] );
});
// Dojo < 1.7
dojo.publish("foobar", [{item:"one", another:"item", anObject:{ deeper:"data" }}]);

在执行时, 登记的匿名函数在认购中被执行来传递对象。

删除订阅

订阅返回一个订阅的手柄,在之后被用于断开,很像dojo.connect和dojo.disconnect之间的关系。只需将句柄作为唯一的参数传

递给dojo.unsubscribe并且不再接收更新。
// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
  var handle = connect.subscribe("/foo/bar", function(message){
    // only runs once in this case:
    connect.unsubscribe(handle);
  });
});
// Dojo < 1.7
var handle = dojo.subscribe("/foo/bar", function(message){
    // only runs once in this case:
    dojo.unsubscribe(handle);
});


在上面的例子中,我们从订阅的函数内断开手柄,从而有效地创建一个“订阅一次”的格局。在 /foo/bar通道上第一时间publish

东西后,连接中断,该函数将沉寂。

另请参阅

许多其他组件使用本主题的机制进行通信。例如,Drag和Drop使用通道/dnd/move/start 和/dnd/move/end来publish关于左右

拖动操作的信息,以及开发商根据需要来订阅这些。

此外, Cometd客户端实现一系列publish/subscribe/unsubscribe来为他的沟通服务。该机制是相同的,尽管有comet 的认购可

以存在于不同的主机和域的其他客户端上。

几个的Dijit小部件使用publish 以提醒用户(和它们的操作其它内部部分)关于状态的变化。举例来说,一个新的选项卡添加到

TabContainer的任何时候,一个消息在channel被发送出去,基于Tabs的ID:

/// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
  var id = "myTabs";
  connect.subscribe(id + "-addChild", function(child){
    // child is the new pane being added to the tabs with id="myTabs"
  });
});
// Dojo < 1.7
var id = "myTabs";
dojo.subscribe(id + "-addChild", function(child){
   // child is the new pane being added to the tabs with id="myTabs"
});

阅读(1178) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~