视图模型和实例
视图模型定义数据的结构。它是一个可复用的蓝图,包含一组属性,例如汽车的颜色、速度和损坏程度。
每个属性都有一种类型,例如 Number、String、Boolean、Color、Enum 或 List(更多信息,请参阅属性类型)。
视图模型本身不存储值。值会存储在一个或多个由该视图模型创建的视图模型实例中。
例如,如果你正在构建一款赛车游戏,你可以创建一个 Car 视图模型,并包含以下属性:
Car (View Model)
color: Color
damage: number
make: string
speed: number
一个视图模型可以用来创建多个视图模型实例。每个实例共享相同的结构,但会存储自己的值。
Car1 (View Model Instance)
color: 0xFFFF0000
damage: 0
make: "Subaru"
speed: 0
Car2 (View Model Instance)
color: 0xFFFF00FF
damage: .9
make: "Honda"
speed: 0
然后,你可以将实例中的属性绑定到设计中的元素,使文本、图像、颜色、动画、状态机以及其他属性能够自动响应数据变化。
创建视图模型
视图模型定义数据的结构。在创建视图模型实例或设置数据绑定之前,你需要先创建一个视图模型并向其中添加属性。
新的 Rive 文件会附带一个名为 "ViewModel1" 的默认视图模型,并且 它已附加到主画板。

- 添加视图模型
在 Data 面板中,点击
+图标并选择 View Model。 - 添加属性
在 Data 面板中,点击视图模型名称旁边的 Add View Model Property 按钮,然后选择你的属性类型。
创建和编辑实例
创建视图模型后,你可以创建一个或多个视图模型实例,用于存储这些属性的实际值。
创建视图模型实例
一个视图模型可以拥有多个实例。每个实例都包含自己的一组属性值,同时共享由视图模型定义的相同结构。
创建新的视图模型时,Rive 会自动创建一个名为 "Instance" 的视图模型实例,这样你就可以立即开始测试绑定并预览数据。

- 查看现有实例
在 Data 面板中选择一个视图模型,然后在 Inspector 中点击实例名称旁边的 Controls 图标。
💡若要一次性查看所有视图模型实例及其值,请点击 Open Table Data 按钮。

- 添加实例
点击
+图标以添加一个新实例。 - 命名实例
双击实例名称以重命名它。
- 更新实例数据
选中实例后,更改它的任意属性。
请注意,这只会更改所选视图模型实例上的值。
移除实例
点击实例名称旁边的 - 图标即可删除该实例。

删除视图模型实例不会移除视图模型或它的属性。它只会移除该实例及其存储的值。
导出实例
默认情况下,导出的视图模型实例会包含在 .riv 文件中。如果这些数据只在开发期间需要,而不是在应用运行时需要,请禁用 Export Instance。

假设你正在 Rive 中构建一个高分榜界面。设计时,你会使用假的分数数据;但当游戏上线后,高分榜会使用来自数据库或其他来源的真实数据填充。
在这种情况下,嵌入示例数据只会增加 .riv 文件大小。
将视图模型实例连接到画板
在绑定数据之前,你需要决定数据应该存放在哪里。
Rive 支持三种常见模式:
| 模式 | 说明 |
|---|---|
| 顶层实例 | 数据存放在顶层画板上,其值可以在整个 Rive 文件中使用 |
| 嵌套组件 | 父视图模型实例存储对嵌套视图模型实例的引用,该引用可以应用到嵌套组件 |
| 有状态嵌套组件 | 自包含、可复用的组件,用于存储自己的唯一数据 |
顶层画板视图模型实例
当数据需要供整个画板及其子级使用时,请将视图模型实例直接附加到顶层画板。
GameVM
├─ health
├─ score
└─ avatar

游戏的主视图模型可能包含一个 score 属性。这个属性可能会被多个嵌套组件使用,例如 header,以及 high scores modal 中的内容。
嵌套组件实例
组件也可以拥有自己的视图模型实例。
在这种模式中,父视图模型会存储对子实例的引用,可以是直接引用,也可以通过列表引用。
GameVM
├─ health
├─ score
├─ avatar
└─ inventory (stores an instance of InventoryVM)
InventoryVM
├─ Sword
├─ Shield
└─ Potion
每个组件实例都可以附加自己的视图模型实例。

当父画板需要管理一组项目,同时仍允许每个组件维护自己的数据时,这种方式很有用。
一个物品栏界面可能包含一个 Item 视图模型实例列表,其中每个物品栏槽位组件都绑定到不同的物品。
由于每个实例都必须显式创建并连接,因此这种模式可以提供强大的运行时控制,但代价是需要额外设置。
有状态组件
有状态组件是一个能够维护自身数据的组件实例。
与传统的组件视图模型实例不同,这些实例不需要 由父视图模型创建或引用。相反,它们的属性会显示在侧边栏中。

更多信息,请参阅有状态组件。