我经常使用BotBuilder-Location并且它工作正常,但我不明白它如何检查必填字段。 我并不是bitwize运算符的专家:
使用requiredfields: locationDialog.LocationRequiredFields.streetAddress | locationDialog.LocationRequiredFields.locality | locationDialog.LocationRequiredFields.region | locationDialog.LocationRequiredFields.postalCode | locationDialog.LocationRequiredFields.country
如果我去node_modules/botbuilder-location/lib/dialogs/required-fields-dialog.js
,我可以看到这个自我调用函数:
(function (LocationRequiredFields) {
LocationRequiredFields[LocationRequiredFields["none"] = 0] = "none";
LocationRequiredFields[LocationRequiredFields["streetAddress"] = 1] = "streetAddress";
LocationRequiredFields[LocationRequiredFields["locality"] = 2] = "locality";
LocationRequiredFields[LocationRequiredFields["region"] = 4] = "region";
LocationRequiredFields[LocationRequiredFields["postalCode"] = 8] = "postalCode";
LocationRequiredFields[LocationRequiredFields["country"] = 16] = "country";
})(LocationRequiredFields = exports.LocationRequiredFields || (exports.LocationRequiredFields = {}));
你能用简单的方式解释它是如何工作的吗? 我在这里查看了GotHub上的BotBuilder-Location文档和问题。
答案 0 :(得分:0)
这里有两件事:
此代码最初是用typescript编写的,然后转换为javascript。 javascript没有枚举。因此,当typescript枚举转换为javascript时,它们就会成为您在问题中的函数中看到的哈希图。
已选择与每个字段关联的数字,因此它可以属于一组位。看看他们如何遵循你在一个字节中看到的0 1 2 4 8 16 ..模式?这样他们就可以打包#34;进入一个较小的包(如一个字节)进行验证。我不完全确定它在这里是如何工作的,但是例如,如果所有必填字段都被填充,那么比特将是111111或十进制31.如果发送的比特不是31,那么将需要一个字段。没有填写。
希望这有帮助。