【发布时间】:2015-11-26 15:53:52
【问题描述】:
我有以下代码:
dataLayer.push({event: 'A',eventAttributes: { attrA: 'a' }});
dataLayer.push({event: 'B',eventAttributes: { attrB: 'b' }});
dataLayer.push({event: 'C',eventAttributes: { attrC: 'c' }});
和一个完全空的 GTM 容器(无标签、无触发器、无变量)。
当我检查 GTM 调试的 Data Layer 选项卡时,我看到:
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543091},
event: 'A',
eventAttributes: {attrA: 'a'}
}
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543092},
event: 'B',
eventAttributes: {attrA: 'a', attrB: 'b'}
}
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543092},
event: 'C',
eventAttributes: {attrA: 'a', attrB: 'b', attrC: 'C'}
}
如您所见,GTM 将值合并到 eventAttributes 对象,而不是覆盖该对象。
Q1:GTM 为什么要这样做?
Q2:有没有办法防止这种情况发生(除了将每个对象属性定义为单独的变量)?
仅供参考,我在数据层中使用eventAttributes 对象,因为我想简单地重新使用其中的任何内容作为我的基于事件的工具(Mixpanel、KISSmetrics...)的属性。对于上述问题,如果我必须在 DataLayer 和 GTM 中显式声明所有变量,我只是看不到任何方法来扩展 Mixpanel/KISSmetrics 的 GTM 实现。
更新
在控制台本身查看 dataLayer 后,显示值已正确推送且未合并:
所以一定是在读取dataLayer时GTM决定合并它们!
【问题讨论】: