Lightning消息服务订阅服务器未接收到来自发布服务器的消息



尽管有很多教程,但我无法获得一个简单的LMS示例,该示例实际上是从示例中剪切和粘贴的。我创建了一对非常简单的LWC,一个在单击按钮时发布硬编码值,另一个只记录/显示发送的消息。它编译和部署时不会出错,控制台日志报告值已发布,订阅服务器已订阅,但从未调用订阅服务器中的消息处理程序。我到底错过了什么?

这是我的代码:

出版商LWC:

testPub.html

<template>
<lightning-button onclick={handlePubClick} variant="brand" label="Test Publish" title="Primary action" class="slds-var-m-left_x-small"></lightning-button>
</template>

testPub.js

import { LightningElement, wire} from 'lwc';
import { publish, MessageContext } from 'lightning/messageService';
import XingoFiltersMC from '@salesforce/messageChannel/XingoFilters__c';
export default class TestPub extends LightningElement {
@wire(MessageContext)
messageContext;

handlePubClick(){
const message = {fu: 'bar'};
console.log('publishing ' + JSON.stringify(message));
publish(this.MessageContext,XingoFiltersMC, message)
}
}

testPub.js meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__RecordPage</target>
<target>lightning__AppPage</target>
<target>lightning__HomePage</target>
</targets>
</LightningComponentBundle>

订阅者LWC:

testSub.html

<template>
Received: {msg}
</template>

testSub.js

import { LightningElement, wire } from 'lwc';
import {subscribe, MessageContext} from 'lightning/messageService';
import XingoFiltersMC from '@salesforce/messageChannel/XingoFilters__c';
export default class TestSub extends LightningElement {
@wire(MessageContext)
messageContext;
msg = "";
subscription = null;
subscribeToMessageChannel() {
console.log("subscribing");

this.subscription = subscribe(
this.messageContext,
XingoFiltersMC,
(message) => this.handleMessage(message)
);
}
handleMessage(message) { //<-- this here never is reached
this.msg =  message ? JSON.stringify(message, null, "t") : "no message payload";
console.log("received " + this.msg);
}
connectedCallback() {
this.subscribeToMessageChannel();
}
}

testSub.js meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__RecordPage</target>
<target>lightning__AppPage</target>
<target>lightning__HomePage</target>
</targets>
</LightningComponentBundle>

消息通道:

force-app\main\default\messageChannels\XingoFilters.messageChannel meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningMessageChannel xmlns="http://soap.sforce.com/2006/04/metadata">
<masterLabel>XingoFilters</masterLabel>
<isExposed>true</isExposed>
<description>Xingo message channel for filter change.</description>
</LightningMessageChannel>

我在VisualCode中使用sfdx force:source:push --json --loglevel debug -f来推送到我的组织,在那里我有一个带有这两个组件的Lightning应用程序

非常感谢任何帮助,我觉得我已经用完了教程和文档,它们看起来都与这个不适合我的测试一致。

根本原因是:

publish(this.MessageContext,XingoFiltersMC, message)

应该是

publish(this.messageContext,XingoFiltersMC, message)

由于这个大写拼写错误,损失了一天多。。。有什么关于如何配置VS代码更好地捕捉这些类型的拼写错误的想法吗?

最新更新