【发布时间】:2022-01-04 05:41:15
【问题描述】:
为什么我的代码不起作用,我有点困惑。
我正在尝试使用以下代码练习 PubSub 设计模式。类实例 displayGreet 订阅了消息函数发布的消息事件。消息函数是附加到按钮的单击事件的处理程序。
目标是让消息函数在单击按钮时向 displayGreet 发送消息,以便将问候语更新到浏览器。
当 displayGreet 和 message 都被编写为函数时,我能够达到预期的结果。但是当 displaygreet 是一个类的实例时,我无法达到同样的效果。
请帮帮我。
class Pubsub {
constructor() {
this.subscribers = {};
}
subscribe(event, callback) {
if (!this.subscribers[event]) {
this.subscribers[event] = [];
}
this.subscribers[event].push(callback);
}
publisher(event, data) {
if (!this.subscribers[event]) {
return;
}
this.subscribers[event].forEach((callback) => {
callback(data);
});
}
}
const pubsub = new Pubsub();
class Sub {
constructor(pubsub) {
this.pubsub = pubsub;
}
greet(greeting) {
console.log(greeting);
const paragraph = document.querySelector('.show')
paragraph.textContent = greeting;
this.pubsub.subscribe("greeted", greeting);
}
}
const displayGreet = new Sub(pubsub);
function morning() {
const greeting = "good morning";
pubsub.publisher("greeted", greeting);
return greeting;
}
const button = document.querySelector('.submit')
button.addEventListener('click', morning)
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">
<p class="show"></p>
<button class="submit">submit</button>
</div>
<script src="src/index.js">
</script>
</body>
</html>
【问题讨论】:
标签: javascript class model-view-controller publish-subscribe loose-coupling