如何在自适应卡片模板中使用 $when 来找出传入数据有效负载的长度并删除输入块

Posted

技术标签:

【中文标题】如何在自适应卡片模板中使用 $when 来找出传入数据有效负载的长度并删除输入块【英文标题】:How to use $when in an adaptive card template to find out the length of an incoming data payload and drop an input block 【发布时间】:2021-09-28 15:53:09 【问题描述】:

我有一个 JSON 文件形式的自适应卡片,其中包含一个Input.ChoiceSet。这是随数据有效负载提供的,它是动态的,因此每次的数据量都不相同。我希望能够删除这个Input.ChoiceSet,如果它基于我要传递给它的数据数组的长度打破了某个阈值。是否可以使用%when 将其写为Input.ChoiceSet 中的条件来执行此操作?

这是我目前所拥有的,但它并没有像我希望的那样工作:


      "type": "Input.ChoiceSet",
      "id": "CompactSelectVal1",
      "$when": "$$data.length < 400",
      "placeholder": "Select a value",
      "choices": [
        
          "$data": "$data",
          "title": "$name",
          "value": "$tag"
        
      ],
      "label": "Input"

在这里使用.length 只是一个猜测,并非基于任何文档。我用来了解$when 的文档如下https://docs.microsoft.com/en-us/adaptive-cards/templating/language。

对此的任何帮助将不胜感激。

【问题讨论】:

我不知道条件布局内的大括号内是否真的需要额外的“$”。您可以将单独的长度参数传递给自适应卡以验证长度。 删除大括号内的“$”并没有什么不同,但我将如何计算长度参数?在这个条件表达式中,data.length 似乎对我不起作用 啊我想我知道你的意思了,所以将数据的长度作为数据数组中的一个元素传递,并在 JSON 代码中使用它来验证长度 完全不是在自适应卡中进行所有活动,而是在进入之前可以通过的长度。我将验证是否有任何选项可以检查自适应卡内的长度。 count 方法对我有用,你可以试试我的解决方案。 【参考方案1】:

您可以使用“count”属性代替“length”,还可以删除花括号“$$data.length 。

试试这个:


  "type": "Input.ChoiceSet",
  "id": "CompactSelectVal1",
  "$when": "$data.count < 400",
  "placeholder": "Select a value",
  "choices": [
    
      "$data": "$data",
      "title": "$name",
      "value": "$tag"
    
  ],
  "label": "Input"

如果条件为真,则选择按钮将从自适应卡片中隐藏。

【讨论】:

谢谢。我还发现使用“$count(data) 您是否也知道在使用 $when 时是否可以做一个后备案例? 我不记得有任何后备选项,但机会非常少。更好的是,您可以在进入自适应卡之前验证所有条件,从而降低风险。

以上是关于如何在自适应卡片模板中使用 $when 来找出传入数据有效负载的长度并删除输入块的主要内容,如果未能解决你的问题,请参考以下文章

我们可以动态添加文本字段吗

适当的自适应卡片输入.ChoiceSet 模板结构

无法在 Microsoft 自适应卡中播放 youtube 视频

如何在自定义表格组件中使用子模板来显示每一行?

如何在 Microsoft Teams 的任务模块中呈现 JSX 元素?

如何使事物在自适应布局中对齐