Javascript Dojo商店行为

Javascript Dojo商店行为,javascript,dojo,Javascript,Dojo,我已经开始学习dojo,在上一个项目中遇到了非常奇怪的语法 谁能给我解释一下这部分不是什么意思吗 dojo.subscribe('/favorites/add', dojo.hitch(this, 'put')); dojo.subscribe('/favorites/remove', this, function(person) { 这是使用,它类似于全局事件的一种形式(并且不以任何方式与存储绑定) 任何代码都可以发布一个“主题”(只是一个字符串,通常格式类似于URL或文

我已经开始学习dojo,在上一个项目中遇到了非常奇怪的语法

谁能给我解释一下这部分不是什么意思吗

dojo.subscribe('/favorites/add', dojo.hitch(this, 'put'));
          dojo.subscribe('/favorites/remove', this, function(person) {
这是使用,它类似于全局事件的一种形式(并且不以任何方式与存储绑定)

任何代码都可以发布一个“主题”(只是一个字符串,通常格式类似于URL或文件系统路径,以使内容看起来有条理/有范围),可以选择使用一个数据对象(或更新的Dojo版本中的任意数量的附加参数)。请注意,Dojo 1.7还可以使用
Dojo/connect
模块,但建议改为使用
Dojo/topic
,尤其是在更高版本中

// Dojo 1.7+
require(["dojo/topic"], function(topic){
    topic.publish("some/topic", "one", "two");
});

// 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 1.7+
require(["dojo/topic"], function(topic){
    topic.subscribe("some/topic", function(){
        console.log("received:", arguments);
    });
});

// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
    connect.subscribe("/foo/bar/baz", function(data){
        console.log("i got", data);
    });
});

// Dojo < 1.7
dojo.subscribe("/foo/bar/baz", function(data){
    console.log("i got", data);
});
发布主题时,将通知该主题的所有订阅者(发布和订阅主题字符串必须完全匹配),并执行其回调函数。如果发布中提供了可选数据对象(或所有附加参数),则将其传递给每个回调函数

请注意,在发布事件发生后创建订阅不会对以前发布的事件追溯触发订阅回调。订阅回调仅在发布事件发生时触发

由于使用了
Dojo.subscribe
(与使用
Dojo/topic
模块相反),这个GitHub项目看起来使用的是非常旧的Dojo版本。它看起来像Dojo1.6,而最新的Dojo版本是1.9。Dojo 1.7在访问Dojo功能的方式上引入了许多更改,并且不推荐使用以前的方法,并且在1.8和1.9中删除了许多旧的方法

文档(具有相关的Dojo版本):

  • 和(对于1.7,包含1.6和1.7的代码)
  • 模块(适用于1.9,与1.7+样式代码相关)
我强烈建议使用最新的Dojo版本,因此使用
Dojo/topic
模块(其中包含
publish
subscribe
方法),而不是使用不推荐使用的
Dojo.publish
Dojo.subscribe
方法


示例代码取自文档链接。

您是否检查了文档中的内容?如果是,你能缩小你不清楚的部分吗?
// Dojo 1.7+
require(["dojo/topic"], function(topic){
    topic.subscribe("some/topic", function(){
        console.log("received:", arguments);
    });
});

// Dojo 1.7 (AMD)
require(["dojo/_base/connect"], function(connect){
    connect.subscribe("/foo/bar/baz", function(data){
        console.log("i got", data);
    });
});

// Dojo < 1.7
dojo.subscribe("/foo/bar/baz", function(data){
    console.log("i got", data);
});