Как установить переменную контекста с точкой в ​​имени? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь добавить переменную данных контекста (CDV), в имени которой есть точка. Согласно сайту Adobe это правильно:

s.contextData['myco.rsid'] = 'value'

К сожалению, после вызова s.t() переменная делится на две или более:

Context Variables
myco.:  
rsid: value 
.myco:  

Как мне установить переменную и предотвратить ее разбиение на части?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы уже правильно его настраиваете. Если вы ссылаетесь на то, что видите в URL-адресе запроса, то именно так его отправляет библиотека Adobe. В вашем примере «myco» является пространством имен, а «rsid» является переменной в этом пространстве имен. И вы можете иметь другие переменные в этом пространстве имен. Например, если у вас есть

s.contextData['myco.rsid1'] = 'value';
s.contextData['myco.rsid2'] = 'value';

Вы увидите в URL запроса AA (просто показывает соответствующую часть):

c.&myco.&rsid1=value&rsid2=value&.myco&.c

Я предполагаю, что вы спрашиваете, потому что вы хотите более легко проанализировать / qa URL-адреса запросов на сбор данных AA из вкладки сети браузера, расширения или какого-либо юнит-тестера? Невозможно заставить AA не вести себя подобным образом при использовании точечного синтаксиса (пространств имен) в ваших переменных.

Но нет ничего особенного в использовании пространств имен для ваших contextData переменных; это просто для вашей собственной организации, если вы выберете. Поэтому, если вы хотите, чтобы все переменные были «верхнего уровня» и отображали полные имена в URL-адресе запроса, не используйте точечный синтаксис.

Если вы хотите по-прежнему использовать некоторую меру организации / иерархии, я предлагаю вместо этого использовать подчеркивание _:

s.contextData['myco_rsid1'] = 'value';
s.contextData['myco_rsid2'] = 'value';

Что даст вам:

c.&myco_rsid1=value&myco_rsid2=value&.c

Side Примечание: Вы не можете сделать полный синтаксис записи объекта / точки с s.contextData, например,

s.contextData = {
    foo:'bar',     // <--- this will properly parse
    myco:{         // this will not properly parse
      rsid:'value' // 
    }              //
};

Библиотека АА не анализирует это правильно; он просто перебирает свойства верхнего уровня contextData при создании URL запроса. Поэтому, если вы выполните полный синтаксис объекта, как описано выше, вы получите:

c.&foo=bar&myco=%5Bobject%20Object%5D&&.c

foo будет в порядке, но в итоге вы получите просто myco с "[object Object]" в качестве записанного значения. Почему Adobe не учитывает полный синтаксис объекта и просто JSON.stringify(s.contextData)? ¯\_(ツ)_/¯

...