Javascript swatchRenderer.js中的Magento 2错误
我已经覆盖了Javascript swatchRenderer.js中的Magento 2错误,javascript,magento2,Javascript,Magento2,我已经覆盖了app\code\Mydirectory\CustomSwatches\view\frontend\web\js\SwatchRenderer.js中的magentoSwatchRenderer.js文件 我的问题是我的产品页面加载出错: 未捕获的TypeError:无法读取未定义的属性“updateData” 我发现SwatchRenderer.js上的data('gallery')的以下函数未定义 updateBaseImage: function (images, contex
app\code\Mydirectory\CustomSwatches\view\frontend\web\js\SwatchRenderer.js
中的magentoSwatchRenderer.js文件
我的问题是我的产品页面加载出错:
未捕获的TypeError:无法读取未定义的属性“updateData”
我发现SwatchRenderer.js
上的data('gallery')
的以下函数未定义
updateBaseImage: function (images, context, isProductViewExist) {
var justAnImage = images[0];
if (isProductViewExist) {
context
.find('[data-gallery-role=gallery-placeholder]')
.data('gallery')
.updateData(images);
} else if (justAnImage && justAnImage.img) {
context.find('.product-image-photo').attr('src', justAnImage.img);
}
}
我查看了一个Magento 2演示站点。在该站点上,上述数据属性设置为JavaScript对象。目标元素是具有上述属性的div。但在我的站点中,它是未定义的,显然我认为我的站点上没有设置数据属性。有人能帮我找到上述元素的setter函数/视图/文件吗?任何帮助都将不胜感激。谢谢。您的Magento实例中使用了什么主题?您是否重命名了容器类名称
在SwatchRenderer.js文件的第202行可以找到一段有趣的代码。在_create函数下,您将看到gallery变量的初始化,如图所示
您会注意到它在.column.main元素下找到了具有数据库的元素。因此,由于缺少列,main元素将返回一个空响应。我找到了一个非常有效的方法来解决这个问题:
将/vendor/magento/module-swatches/view/frontend/web/js/swatch-renderer.js
-文件复制到app/design/YourName/YourTheme/magento\u-swatches/web/js/swatch-renderer.js
,并用以下代码替换updateBaseImage()
(第1152行)中的代码:
updateBaseImage: function (images, context, isInProductView, eventName) {
var gallery = context.find(this.options.mediaGallerySelector).data('gallery');
if (eventName === undefined && gallery !== undefined) {
this.processUpdateBaseImage(images, context, isInProductView, gallery);
} else {
context.find(this.options.mediaGallerySelector).on('gallery:loaded', function (loadedGallery) {
loadedGallery = context.find(this.options.mediaGallerySelector).data('gallery');
this.processUpdateBaseImage(images, context, isInProductView, loadedGallery);
}.bind(this));
}
},
诀窍在于:此方法不会等待库完全加载,而此事件(gallery:loaded
)随时可用。通过将其添加到方法中,效果很好
我只希望Magento开发人员能够理解这一点,并在核心代码中实现这一点。Magento实例中使用了什么主题?您是否重命名了容器类名称?自定义主题,不,我没有重命名容器类。它们在适当的地方。元素[数据库角色=库占位符]
就在那里。但是它缺少数据库
(不是数据库角色
)属性。只需SwatchRenderer文件?产品视图页面的HTML代码。您还可以尝试在浏览器控制台上执行jQuery(“[data gallery role=gallery placeholder]”),以检查产品视图页面上是否存在所述元素。接下来,如果元素确实存在,请尝试执行jQuery(“[data gallery role=gallery placeholder]”,“.column.main”)。请将以上jQuery代码的结果发布给我,以便我向您的客户进一步解释解决方案problem@oliver我做了那些实验,但失败了<代码>
以上代码是我在Magento默认中的数据角色,我应该重命名它吗?