DataLayer

公共类 DataLayer

数据层是包含有关应用的一般信息的地图。它使用一组标准的键,因此理解该规范的任何一方都可以读取它。数据层状态通过其 API 进行更新。例如,应用可能会包含以下 dataLayer:

   {
     title: "Original screen title"
   }
由于应用的状态/数据可能会发生变化,因此,此应用可以通过如下调用来更新 dataLayer:
   dataLayer.push(DataLayer.mapOf("title", "New screen title"));
现在,数据层包含:
   {
     title: "New screen title"
   }
再次推送后:
 dataLayer.push(DataLayer.mapOf("xyz", 3));
dataLayer 包含:
   {
     "title": "New screen title",
     "xyz": 3
   }
以下示例演示了数组和地图合并的运作方式。如果原始 dataLayer 包含:
   {
     "items": ["item1", null, "item2", {"a": "aValue", "b": "bValue"}]
   }
在此推送完成后:
 dataLayer.push("items", DataLayer.listOf(null, "item6", DataLayer.OBJECT_NOT_PRESENT,
     DataLayer.mapOf("a", null)));
dataLayer 包含:
   {
     "items": [null, "item6", "item2", {"a": null, "b": "bValue"}]
   }

推送会同步进行;推送之后,更改会反映在模型中。

event 键推送到数据层后,系统会评估代码的规则,然后触发与此事件匹配的所有代码。 例如,假设某个容器的一个代码的触发规则是“event”等于“openScreen”,在推送之后:

 dataLayer.push("event", "openScreen");
,系统将触发该代码。

字段摘要

public static final Object OBJECT_NOT_PRESENT 在 List 中使用的此类型的值会导致列表在合并时稀疏;就好像该索引中没有任何元素一样。

公共方法摘要

对象
get(String )
static List<Object>
listOf(Object... 对象)
static Map<Object, Object>
mapOf(Object... 对象)
void
push(Map<Object, Object> update)
void
push(Object , 对象 value)

字段

public static final 对象 OBJECT_NOT_PRESENT

在 List 中使用的此类型的值会导致列表在合并时稀疏;就好像该索引中没有任何元素一样。

公共方法

public 对象 get (String key)

返回模型中与给定键关联的对象。如果未找到密钥,则返回 null

键可以嵌入英文句点。例如:在模型中,键为 "a.b.c" 的键在映射中返回一个键为 "c" 的映射,在键为 "b" 的映射中返回键为 "a"

public static List<Object> listOf (Object... objects)

用于创建列表的实用程序方法。

例如,以下代码会创建一个包含 "object1""object2" 的列表:

   List<Object> list = DataLayer.listOf("object1", "object2");
 

public static Map<Object, Object> mapOf (Object... objects)

用于创建地图的实用程序方法。这些参数应为键值对。

例如,以下代码会创建一个映射,将 "key1" 映射到 "value1",将 "key2" 映射到 "value2"

   Map<Object, Object> map = DataLayer.mapOf("key1", "value1", "key2", "value2");
 

抛出
IllegalArgumentException 如果存在奇数个参数,

public void push (Map<Object, Object> update)

将给定的 update 对象合并到现有数据模型中,并使用更新调用任何监听器(合并发生后)。

如果要表示缺失值(例如 List 中的空索引),请使用 OBJECT_NOT_PRESENT 对象。

如果另一个线程正在执行推送,则此调用会阻塞,直到该线程完成。

这通常是同步调用。不过,如果在线程执行推送时,同一线程又执行了一次推送,那么第二次推送是异步的(第二次推送将在对数据层进行更改之前返回)。例如,如果为响应代码触发而执行数据层推送,就会发生来自同一线程的第二次推送。

如果 update 包含 event 键,则系统会对规则进行评估,并触发匹配的标记。

参数
update 要处理的更新对象

public void push (Object key, Object value)

将数据键值对推送到数据层。这只是一种调用 push(DataLayer.mapOf(key, value)) 的便捷方法。