5

这是我的 dataLayer 数组:

dataLayer = [{
  'giftBatch' : {
    'giftID': '',
    'giftAmount': 0,
    'giftCount': 0,
    'giftUpdate': {
      'giftPhase': 'Gift Empty'
    }
  },
  'txBatch': {
    'txID': '',
    'txTotal': 0,
    'txURL': window.location.href,
    'txUpdate': {
      'txPhase': 'Transaction Opened',
      'txT0': new Date(),
      'txT1': ''
      'txT2': ''
    }
  }
}];

控制台结果为:Array [Object1]

Object1 根据需要包含“giftBatch”和“txBatch”对象。

我有一个触发器,稍后会触发以更新 dataLayer 中的对象。

例如,将“giftAmount”更新为 50,将“giftCount”更新为 1。

我已经尝试了以下方法(我只展示了我修改“一次一个对象”的失败尝试),

尝试1:

dataLayer.push({giftAmount : 50});

结果:

数组 [object1, object2]

Object1 同上,

Object2 是一个新对象,其属性为'Gift Amount' : 50 ,

尝试2:

dataLayer.push({giftBatch.giftAmount: 222});

结果: SyntaxError: missing : after property id

尝试 3:

dataLayer.push({'giftBatch.giftAmount' : 50});

结果:

数组 [object1, object2]

Object1 同上,

Object2 是一个新对象,其属性为'giftBatch.giftAmount': 50

我在这里做错了什么?

根据此处的 dataLayer 部分: https: //support.google.com/tagmanager/answer/6106899?hl= en

我应该能够编辑嵌套对象值。

PS。这就是我现在正在使用的,它确实有效。但是,为什么不推动工作呢?

dataLayer[index].giftBatch.giftAmount = 50;

其中 index 是 Object2 的索引。

任何帮助都会很棒。

谢谢你。

4

1 回答 1

7

编辑 dataLayer 的现有内容是不好的做法,但您应该只需要像这样发送覆盖属性值:

dataLayer.push({'giftBatch':{'giftAmount' : 50}});

标签管理器最晚开始,Object并将继续向后查看以前的对象以确定每个 DataLayer 变量的当前设置,因此仅giftBatch.giftAmount在此新推送中被覆盖。

这是一个预览调试器的示例,它显示了新test对象的 dataLayer 合并视图,其中包含来自先前消息的属性:

GTM 预览调试器 DataLayer 视图

解释此调试器数据层视图

在这种情况下,之前的消息(#4 和/或#5)至少推送:

 {test:{test:8}} // #6 does not contain test.test so it is from earlier

或者最多他们可以推动:

 {test:{test:..,foo:..,test3:..}} // #4 if it's been completely shadowed
 {test:{test:8,foo:..,test3:..}} // #5 if it has test.test, must have 8

没有标签可以在 #3 和 #7 之间触发,Messages因为缺少event属性的对象也是如此,因此当跟踪可能在事件 #7 上触发的标签上发生下一次跟踪时,应将来自 #4 的任何阴影值视为不可访问。

于 2015-12-10T23:20:21.920 回答