如何将 Javascript 地图作为参数从闪电组件发送到 Apex 服务器控制器?

How to send Javascript map as a parameter from lightning component to Apex server controller?

我有一个 salesforce lightning 组件,它使服务器端操作排队。对于该操作,我需要将映射作为参数之一传递,但看起来它需要对象的内存地址。

创建地图并调用服务器端操作的客户端代码:

var action = cmp.get("c.save");
var mapToSend = new Map()
for (var key of valueMap.keys()) {
    mapToSend.set(key, valueMap.get(key))
}
action.setParams({
    "name": cmp.get("v.name"),
    "params": mapToSend
});

然后在控制器中:

 public static Boolean save(String name, Map<String, Object> params) {
javascript 的

日志显示很好 Map 所有正确的字段,但 salesforce 系统日志只显示

14:55:16.0 (3172304)|VARIABLE_SCOPE_BEGIN|[41]|name|String|false|false
14:55:16.0 (3188041)|VARIABLE_ASSIGNMENT|[41]|name|"Account"
14:55:16.0 (3191758)|VARIABLE_SCOPE_BEGIN|[41]|params|Map<String,ANY>|true|false
14:55:16.0 (3204719)|VARIABLE_ASSIGNMENT|[41]|params|{}|0x30d2397a

知道为什么吗? |false|false|true|false 在日志中的含义是什么?

问题在于理解 javascript 数据结构。正确的结果是通过使用准备为

的数据调用顶点控制器来实现的
var mapToSend = {}
for (var key of valueMap.keys()) {
    mapToSend[key] = valueMap.get(key);
}
action.setParams({
    "name": cmp.get("v.name"),
    "params": mapToSend
});