Knockout.js Google标签管理器-dataLayer.push()带分页,继续推?

Knockout.js Google标签管理器-dataLayer.push()带分页,继续推?,knockout.js,pagination,google-tag-manager,Knockout.js,Pagination,Google Tag Manager,我们正在使用正确的分页和获取产品,这些产品使用KnockoutJS绑定到我们的视图。一切都很顺利 我们公司希望记录这些产品的印象,因此我们可以轻松地将每个产品阵列推送到电子商务块的数据层中 通常的做法是不断添加和添加此GTM数据层对象,如果您在客户端筛选/排序/缩小的产品列表页面上,此数据层数组将变得非常臃肿,并可能对浏览器内存使用产生影响 这一推动意义重大吗?或者我们可以简单地将新产品列表数组每次分配给数据层中的第一个索引吗?GTM会正确记录这些信息吗?继续推送到数据层阵列是正确的,因为当前D

我们正在使用正确的分页和获取产品,这些产品使用KnockoutJS绑定到我们的视图。一切都很顺利

我们公司希望记录这些产品的印象,因此我们可以轻松地将每个产品阵列推送到电子商务块的数据层中

通常的做法是不断添加和添加此GTM数据层对象,如果您在客户端筛选/排序/缩小的产品列表页面上,此数据层数组将变得非常臃肿,并可能对浏览器内存使用产生影响


这一推动意义重大吗?或者我们可以简单地将新产品列表数组每次分配给数据层中的第一个索引吗?GTM会正确记录这些信息吗?

继续推送到数据层阵列是正确的,因为当前DOM中的所有产品都应该作为印象进行跟踪。如果您没有跟踪所有当前印象,则无法在单击它们时跟踪位置。Google Tag Manager数据模型将在每次推送时更新,将新推送中的产品印象合并到初始页面加载时的任何内容中

为了防止阵列变得太大,我决定在新dataLayer.push之前清除ajaxSuccess上的数据层

$(document).ajaxSuccess(function (event, xhr, settings) {

    /* Clear dataLayer - prevents array getting too large */
    dataLayer.length = 0;


    dataLayer.push({
      'ecommerce': {
      'impressions': [
       {
         'name': 'Triblend Android T-Shirt',
         'id': '12345',
         'price': '15.25',
         'brand': 'Google',
         'category': 'Apparel',
         'variant': 'Gray',
         'list': 'Search Results',
         'position': 1
       }]
      }
    });
  });

您需要在数据层中同时拥有所有产品,还是只需要当前页面?一次只需要当前页面,但我们需要GTM在人们翻阅每一页产品时“记录”每一个产品印象。