中继器链接到 Wix 中的动态页面

问题描述

我目前正在编写一个使用转发器设置的搜索结果页面,以便转发器容器能够将用户重定向到动态页面

转发器和动态页面上使用的数据集通过相关集合中的“编号”字段链接。因此,如果转发器在数字字段中显示“1”的详细信息,则用户可以单击容器框并重定向到“1”的动态页面。我设法让这个工作正常,因为当我点击相关容器时,我被重定向到正确的动态页面。但是,转发器数据集中存在的某些数字在动态页面的数据集中不存在。所以我可以在中继器的数据集中有 1-50 个数字,但动态页面的数据集中只有 20 个数字,目前如果容器包含动态页面中不存在的数字,它仍然会尝试重定向但只会导致 404 错误页面,我更喜欢在这种情况下,容器根本无法点击。

到目前为止,我已经尝试了以下代码

$w('#Dataset1').onReady(() => {
  wixData.query('Collection1')
    .eq('number',number1)
    .find()
    .then(res => {
      const number1 = res.number1;
    })
    .catch ((err) => {
      let errorMsg = err;
    });
    wixData.query('Collection2')
    .eq('number',number2)
    .find()
    .then(res => {
      const number2 = res.number2;
    })
    .catch ( (err) => {
      let errorMsg = err;
    });

    if (number1 === number2){
$w("#container2").onClick( (event) => {
    
    

 let $item =  $w.at(event.context);
 let currentItem = $item('#Dataset1').getCurrentItem();
 let dynamicPageID = `${currentItem.number}`
 let collectionID = `${currentItem.title}`
 
   console.log('https://www.mywebsite.com/'+collectionID+'/'+dynamicPageID);
 wixLocation.to('https://www.mywebsite.comk/'+collectionID+'/'+dynamicPageID);
 });
    }
});
}

但这仍然会重定向到编号不存在的动态页面并发送 404 错误

有人能指点我正确的方向吗?

谢谢


在 Sam 提出有关 async/await 的建议之后,我一直在尝试代码,但仍未找到可行的解决方案。我尝试了以下方法

async function linktodynamicpage () {
$w('#Dataset1').onReady(() => {
  wixData.query('Collection1')
    .eq('number',number1)
    .find()
    .then(async(res) => {
      const number1 = await res.number1;
    })
    .catch ((err) => {
      let errorMsg = err;
    });
    wixData.query('Collection2')
    .eq('number',number2)
    .find()
    .then(async(res) => {
      const number2 = await res.number2;
    })
    .catch ( (err) => {
      let errorMsg = err;
    });

    if (number1 === number2){
$w("#container2").onClick( (event) => {
    
    

 let $item =  $w.at(event.context);
 let currentItem = $item('#Dataset1').getCurrentItem();
 let dynamicPageID = `${currentItem.number}`
 let collectionID = `${currentItem.title}`
 
   console.log('https://www.mywebsite.com/'+collectionID+'/'+dynamicPageID);
 wixLocation.to('https://www.mywebsite.comk/'+collectionID+'/'+dynamicPageID);
 });
    }
});
}

我尝试了一些变体,试图移动异步,但不幸的是无济于事。

只是想看看我是否正确获取了异步代码或者是否有错误。这样,至少我知道 async/await 选项是否可以解决我的问题。

谢谢

解决方法

我的猜测是,这与您代码中的承诺有关。在您检查 number1 是否等于 number2 时,您的查询尚未解决,因此它们都是 undefined 并且始终彼此相等。

要解决这个问题,您可以切换到使用 async/await 语法,或者使用 Promise.all() 等待两个查询都解决后再进行比较。


编辑仍然不会等待查询解决。你需要更多这样的东西:

async function linktodynamicpage () {
  $w('#Dataset1').onReady(async () => {
    const number1 = await wixData.query('Collection1')
      .eq('number',number1)
      .find();
    
    const number2 = await wixData.query('Collection2')
      .eq('number',number2)
      .find();

    if (number1 === number2){
    
    // the rest of the code...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...