# Data Binding

## Concept

- 每个组件都有其自己的数据属性。
- 可以如下设置组件的数据属性。
  - 初始数据：建模人员可以在建模过程中设置初始数据。
  - 对于数据源组件：将从数据源接收的结果设置为自己的数据。
  - 对于基于 UI 的组件：通过用户交互更改的值设置为数据。
  - 数据传播：可以通过设置其他组件的数据绑定来设置。
- 可以根据设置的数据绑定模型来更改目标组件的属性，以响应组件数据的更改。

## Identifier

### ID

- 组件的唯一名称

### class

- 组件类别
- 可以设置多个用空格分割的类
- 每个类可以在发送数据时被指定为目标。

### template prefix

- 可以在将组件指定为模板时设置。
- 设置为模板的组件不会显示。
- 指何时通过克隆使用模板动态创建组件。

### no data no show

- 在 Viewer 模式下操作时，如果在组件中没有数据，则不显示。

### intent sensitive

- 更改源组件的数据时，数据传播有效。 换句话说，即使重新设置了数据，除非实际更改该值，否则数据传播将不起作用。 这是一种提高监视目的效率的方法。
- 但是，当打开 intent sensitive 设置时，即使数据没有更改，即该值实际上并未更改，也可以进行数据传播。
- 此属性也对源组件的 value 属性的配置动作发生作用。

## Initial Data

- 设置组件的初始数据。
- 数据可以设置为字符串，数字或 JSON 对象类型之一。

## Data Spread

- 此设置根据源组件的数据值更改目标组件的属性。
- 如果源组件更改了目标组件的数据属性，则目标组件的数据传播功能将连续运行，因此该功能称为数据传播。
- 可以进行多种数据传播设置

### 源数据 (source)

- 指定源组件后，它将将该组件的数据传播到目标组件。
- 基于组件关系的目标指定
  - (self)：组件本身
- 通过 ID 指定：#id
- 如果未指定，它将传播组件本身的数据，与(self)相同。

### accessor

- 它是根据源组件的数据值更改目标组件的属性的设置。
- 设置方法遵循[JSONATA 文档](http://docs.jsonata.org/overview.html)。

### target

- 指定用于数据传播的目标组件。
- 由 ID 指定：#id
- 指定为类：.class
- 基于数据的目标指定 -（key）：以数据对象的键值为 id 的组件将成为目标组件。 -[property]：将数据对象的属性值作为 ID 的组件将成为目标组件。

### property

- 指定要传播数据值的目标组件的属性。

### rule

指定如何将要传播的数据应用于目标组件属性。

- value
  - 值本身被设置为组件的目标属性。
- map
  - 在目标组件的属性中设置数据属性的值。
- range
  - 在目标组件的属性中设置包含该值的范围的映射值。
- eval
  - eval 代码可以用 JavaScript 语法编写。
  - eval 代码的 context (this)是源组件。
  - eval 代码的参数具有 value 和 targets。
    - value：源组件的数据中 accessor 对应的值
    - targets：目标组件列表

### 无数据不传播(No Data No Spreading)

- 只有当根据规则类型的最终结果值不是空值时，才会传播数据。
  - 如果结果值为 undefined、null、NaN 或空白 ('')，则不会展开。
  - 否则，即使结果是数字零，数据也会被传播。
