【问题标题】:Wix Velo — How to work with Array of ObjectWix Velo — 如何使用对象数组
【发布时间】:2021-06-10 08:54:03
【问题描述】:

我目前正在Wix 上建立一个网站,但遇到了一个我无法摆脱的问题。 Wix 支持或 Wix Velo 论坛都无法帮助我。

我有一个连接到 Stores/Products 集合的转发器,并且在 Stores/Products 集合中有一个包含产品附加信息部分的集合字段。我有三个信息部分;节奏、流派和标签。每个都包含一个描述。

看起来像这样:

    [
  {
    "title": "Tempo",
    "description": "<p>142 BPM</p>\n"
  },
  {
    "title": "Genre",
    "description": "<p>Jazz</p>\n"
  },
  {
    "title": "Tags",
    "description": "<p>Frank Ocean, Travis Scott</p>\n"
  }
]

我已经弄清楚了如何使用以下代码提取单个对象:

export function audioRepeater_itemReady($item, itemData, index) {
    let product = $item('#dataset3').getCurrentItem(itemData._id)
    let ArrayAdditionalInfo = []
        ArrayAdditionalInfo = product.additionalInfoSections
        ArrayAdditionalInfo.forEach((element) => {
    
            console.log(element.title)
            console.log(element.description)
        })

但我希望它能够确定是否例如。 Title === "Genre",然后它将显示该数组中的描述,如下所示:

{
        // if equal to this:
        "title": "Genre",

        // show me this
        "description": "<p>Jazz</p>\n"
      },

整个计划是在我可以在转发器中实现的文本元素中显示描述输出。 我尝试过使用 if 语句,但我自己无法将它们组合在一起。如果这令人困惑,我很乐意详细说明。

提前谢谢你。

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    我不能 100% 确定我是否正确理解了这个问题,但如果您想显示所有标题,并且如果标题是 Genre,则有条件地描述,您可以只使用三进制:

    let data = [{
        "title": "Tempo",
        "description": "142 BPM\n"
    },{
        "title": "Genre",
        "description": "Jazz\n"
    },{
        "title": "Tags",
        "description": "Frank Ocean, Travis Scott\n"
    }];
    
    data.forEach(e => $("#products").append(
        `<p>Title: ${e.title}${
            e.title === "Genre" 
                ? "<br>description: " + e.description 
                : ""
        }</p>`
    ));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <div id="products">
    </div>

    【讨论】:

    • 我已经尝试实现这一点,但在通过您自己的数据集合访问数据时,Wix 似乎并没有那么通用。我可能会尝试根据您的代码提出解决方法。感谢您的回复
    【解决方案2】:

    我认为您的问题与处理程序有关。您使用中继器 onItemReady 处理程序,这不是您的情况的最佳选择。它要求中继器中的每一行。而不是这个,我建议使用数据集的 onReady

    $w("#dataset3").onReady( () => {
         console.log("The dataset is ready");
         $w("#audioRepeater").getItems(0, 20).then( (result) => {
            let items = result.items;
            items.forEach((element) => {
               if (element.title === 'Genre') {
                  doWhatDoYouWant(element)
               }
            }) 
         } ).catch( (err) => {
            let errMsg = err.message;
            let errCode = err.code;
         } );
    } );
    

    请注意这个块应该被插入到 $w.onReady

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多