1

我正在尝试使用从页面中的机器人网络聊天控件发送的每条消息注入 channelData。我环顾四周,发现了这个样本(https://cmsdk.com/javascript/how-to-send-custom-channel-data-when-using-web-chat-c​​lient -with-bot-framework.html )和我的代码看起来像下面的代码。

问题是这在 Chrome 中有效,但扩展运算符 (...) 在 Edge 或 IE 上无效。是否有适用于所有浏览器的替代语法?

var user = {
    id: '@User.Identity.Name',
    name: '@User.Identity.Name'
};

var bot = {
    id: BotId,
    name: 'BotName'
};

var botConnect = new BotChat.DirectLine({
    secret: '@ViewData["BotSecret"]',
    webSockets: 'true'
});

var v = { ...botConnect };
debugger;

BotChat.App({
    botConnection: {
        ...botConnect,
        postActivity: activity => {
            activity.channelData = {
                StudentId: '@User.Identity.Name'
            };
            return botConnect.postActivity(activity);
        }
    },
    user: user,
    bot: bot,
    resize: 'detect'
}, document.getElementById("bot"));
4

2 回答 2

0

刚刚结束了这个循环,我与一些了解他们的 JS 的人一起工作,我们实现了一个适用于 IE、Chrome 和 Edge 的“传播等效”功能(尚未在 Safari 中测试,但我想它也应该在那里工作) .

IE 不喜欢 => 运算符,因此我们也将其更改为函数,这是生成的代码:

var user = {
    id: '@User.Identity.Name',
    name: '@User.Identity.Name'
};

var bot = {
    id: 'TheBotId',
    name: 'TheBotName'
};

var botConnect = new BotChat.DirectLine({
    secret: 'TheBotSecret',
    webSockets: 'true'
});

// Spread equivalent function
function getBotConnectionDetail(botconnection) {
    var botConnectionDetail = {};
    var keys = Object.keys(botconnection);
    for (var i = 0; i < keys.length; i++) {
        botConnectionDetail[keys[i]] = botconnection[keys[i]];
    };
    botConnectionDetail['postActivity'] = function (activity) {
        activity.channelData = {
            StudentId: '@User.Identity.Name'
        };
        return botconnection.postActivity(activity)
    };
    return botConnectionDetail;
}

// Invokes Bot
BotChat.App({
        botConnection: getBotConnectionDetail(botConnect),
        user: user,
        bot: bot,
        resize: 'detect'
    },
    document.getElementById("bot")
);
于 2017-10-23T14:18:33.140 回答
0

看起来 Babel 有一个插件,可以使用Object.assign. 这并不能完全解决您的问题,因为 IE 仍然不支持Object.assign- 在 Babel 的情况下,为Object.Assign. 尽管在你的项目中包含 Babel 可能有点过头了,但MDN 提供了一个简单的独立polyfill 的示例代码Object.assign,可能更合理地包含它。

如果这是一个令人满意的依赖关系,那么一旦Object.assign你可以跨浏览器使用,Babel 文档建议这两行代码是等效的:

在:

z = { x, ...y };

出去:

z = Object.assign({ x }, y);
于 2017-10-23T02:35:12.907 回答