模型 模型组件(Model) - jingjiajie/FrontWork GitHub Wiki
模型组件(Model)是FrontWork中最重要的组件之一。它是FrontWork窗口的数据中枢。大多数提供数据交互的视图,都需要连接Model来进行数据同步。当然,如果要实现多个视图的数据联动,自然也少不了Model。另外,要进行前端与后端服务器的数据同步,需要使用到同步器,而同步器也不能脱离Model而存在。可以说,Model是FrontWork的心脏。
Model组件可以从工具箱中的FrontWork选项卡中找到。添加一个Model和其他的组件一样简单,只需要将其拖放到窗口上就完成了。在FrontWork中,Model中的数据是以数据表的形式存在的。数据表的每一列有列名,列名即为配置中心中配置的每一个字段的字段名。同时,Model还允许设定选区,类似于用户用鼠标拖选Excel表一样,Model的选区属性记录用户当前的选区范围。Model的选区允许多选区,即同时选中多块区域,故SelectionRange属性是一个Range类型的数组,其中每一个Range记录了一个选区范围。为了简单,用户通常可以使用FirstSelectionRange属性来直接操作首块选区,当只需要一块选区时,这是比较实用的。
Model组件在绑定到配置中心之后,会根据配置中心所配置的所有字段,自动地建立相应的数据表,来提供对数据存储的能力。FrontWork提供的Model组件实现了FrontWork的IModel接口,这个接口规定了模型组件应该提供的所有函数,属性以及事件。为第三方开发提供了方便的参考。IModel规定的所有内容在FrontWork的API文档中均可查阅。作为简单的入门教程,下面,我们介绍几个Model提供的函数:
//增加一行数据,传入参数为字典,字段名对应字段值。返回新增行的行号。
public long AddRow(IDictionary<String, Object> data)
//增加若干数据,传入参数为字典数组,分别为每行数据。返回所有新增行对应的行号。
public long[] AddRows(IDictionary<String, Object>[] data)
/*
* FrontWork中Model的相关函数大多提供了操作一行和操作多行的重载。
* 下面只介绍操作一行的函数
*/
//插入一行数据,参数为插入的行号和插入行的数据
public void InsertRow(long row, IDictionary<String, Object> data)
//删除一行,参数为行号
public void RemoveRow(long row)
//更新一行,参数为更新的行号
public void UpdateRow(long row, IDictionary<string, object> data)
//更新单元格,参数为行号,列名和单元格数据
public void UpdateCell(long row, string columnName, object data)
FrontWork的IModel接口规定的函数远远不止于此。第三方开发者可以查阅API文档,查看完整的接口函数,来进行组件的开发。
为了配合同步器等组件将Model中数据的变化同步到服务器或数据库里,FrontWork为Model中的每一行记录了同步状态。Model中的同步状态有如下四种:
Added 新增
AddedUpdated 新增并修改
Updated 修改
Synchronized 已同步
四种同步状态遵循如下转换关系:
根据上图可以清楚地看到,当用户新建一行时,同步状态为Added,当新建一行被编辑时,状态更新为AddedUpdated,当新建的行被同步器同步时,状态更新为Synchronized。当用户从服务器查询数据时,得到的数据初始状态为Synchronized,当用户修改这些行时,状态变为Updated,当用户对这些行进行同步时,状态变为Synchronized。
可以发现,我们并没有将上图中的Added状态用Synchronize操作连接到Synchronized状态,这是因为一般来说如果用户仅仅是新建一行却没有输入任何数据,那么这一行没有实际意义。在使用同步器同步时,Model会自动将这些没有编辑过内容的行删除掉。
行同步状态的操作函数
/*获取行同步状态*/
public SynchronizationState GetRowSynchronizationState(int row);
/*更新行同步状态*/
public void UpdateRowSynchronizationState(int row, SynchronizationState state);
一般来说,Model需要被其他视图,同步器等组件绑定,才能发挥出强大的作用。在后面的介绍中,我们会介绍FrontWork提供的其他基本组件,并讲解它们是如何协同Model一起,展现出强大的效果的。