【问题标题】:Repeater linked to Dynamic Page in Wix中继器链接到 Wix 中的动态页面
【发布时间】:2021-03-30 20:16:25
【问题描述】:

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

转发器和动态页面上使用的数据集通过相关集合中的“数字”字段链接。因此,如果中继器在数字字段中显示“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 选项是否可以解决我的问题。

谢谢

【问题讨论】:

    标签: repeater velo dynamic-pages


    【解决方案1】:

    我的猜测是,这与您代码中的 Promises 有关。在您检查 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...
    

    【讨论】:

    • 感谢您的回复@Sam - 我已根据您的 async/await 建议编辑了我的原始帖子,并提供了更多详细信息。如果您可以检查并告诉我您的想法,我们将不胜感激。干杯
    • @The_Train 我添加了一个编辑来解决您的编辑。此代码在继续之前等待两个查询解决。从理论上讲,最好在此处使用Promise.all,以便您可以并行运行查询。你也可以试试。
    • 感谢您提供的额外信息。我尝试了你的代码,但它没有用,所以我尝试在它的基础上构建它,同时也使用 Promise.all 但到目前为止无济于事 - 要么没有任何东西是可点击的,要么一切都可以点击,这取决于我采取的路线与代码。我认为我需要阅读更多关于 Promise.all 的内容,然后再对其进行破解,以便在我取得进一步进展时进行报告。感谢您到目前为止的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多