javascript - 用于创建相关产品列表的 Wix 指南不会在点击时自行重新加载

标签 javascript velo

我已经按照 Wix 的指南在他们的动态产品页面底部创建了一个相关产品区域。

它基本上可以如您所愿地工作。当您单击其中一个相关产品并看到相关产品列表没有更改以反射(reflect)当前加载的产品时,问题就来了。

要更改相关产品列表的唯一方法是刷新页面。

是否有可能对此进行简单的修复?下面是他们的代码:

import wixData from 'wix-data';
import wixLocation from 'wix-location';

$w.onReady(function () {
 loadRelatedProducts();
});

async function loadRelatedProducts() {
 let product = await $w('#productPage1').getProduct();
 let relatedProductResults = await Promise.all([
  relatedProductsByTable(product),
  relatedProductsByPrice(product)
  ]);

 if (relatedProductResults[0].length > 0)
  showRelatedProducts(relatedProductResults[0]);
 else
  showRelatedProducts(relatedProductResults[1]);
}


async function relatedProductsByTable(product) {
 let productId = product._id;

 // find related products by relation table
 let relatedByTable = await Promise.all([
  wixData.query('RelatedProducts')
  .eq('productA', productId)
  .include('productB')
  .find(),
  wixData.query('RelatedProducts')
  .eq('productB', productId)
  .include('productA')
  .find()
 ]);

 let relatedProducts = [
  ...relatedByTable[0].items.map(_ => _.productB),
  ...relatedByTable[1].items.map(_ => _.productA)
 ];
 return relatedProducts;
}



async function relatedProductsByPrice(product) {
 let productId = product._id;

 // find related products by price
 let relatedByPrice = await wixData.query('Stores/Products')
  .between('price', product.price * 0.8, product.price * 1.2)
  .ne('_id', productId)
  .find();
 return relatedByPrice.items;
}



function showRelatedProducts(relatedProducts){
 if(relatedProducts.length > 0){
     relatedProducts.splice(4, relatedProducts.length);
  $w('#relatedItemsRepeater').onItemReady(relatedItemReady);
  $w("#relatedItemsRepeater").data = relatedProducts;
  $w("#relatedItems").expand();
 }
 else {
  $w("#relatedItems").collapse();
 }
}



function relatedItemReady($w, product){
 $w("#productImage").src = product.mainMedia;
 $w("#productName").text = product.name;
 $w("#productPrice").text = product.formattedPrice;
 $w('#productImage').onClick(() => {
  wixLocation.to(product.productPageUrl);
 });
}

我怀疑问题出在这一切都由 .onReady() 事件触发。不幸的是,我不确定如何让这个在另一个触发器上重新运行,比如当相关项目本身被点击时。

当您单击其中一个相关产品时,页面本身不会重新加载。相反,我认为他们只是重写 URL,然后更新然后从数据库中重新获取数据。

最佳答案

的确,你是对的。选择相关项目时,页面本身不会重新加载,因此不会生成新的相关项目列表。实际上,在发布此示例时,没有简单的方法来解决这个问题。

从那时起,Wix 公开了 wix-location.onChange() 函数来解决这个问题。您需要做的就是添加以下行:

wixLocation.onChange( () => loadRelatedProducts() );

onReady() 之前甚至在 onReady() 中添加它可能是最有意义的。

关于javascript - 用于创建相关产品列表的 Wix 指南不会在点击时自行重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639692/

相关文章:

javascript - 单击 Angular 4 应用程序中的 SVG 元素时调用函数

javascript - FullCalendar 在 laravel 中不起作用?

javascript - 如何在 javascript/nodejs 中拆分包含 n 个连接的 json 字符串的字符串?

javascript - 无法从函数内部更改全局变量的值

javascript - 用于验证网站电子邮件的基本概念是什么?

ios - 导航 wix v2-v3 未正确隐藏底部选项卡

javascript - WoW Armory APi - 无法获得标题

seo - 添加Local Business Schema时,在同一页面的不同标记中使用相同的@type业务是错误的吗?

reactjs - 使用基于 JS 的导航解决方案(如 React Navigation)而不是使用 native 导航(如 Wix 的 React Native Navigation)的缺点?

javascript - jQuery UI 对话框标题中的图标