Class: DataModel

ht. DataModel

new DataModel()

数据容器ht.DataModel作为承载Data数据的模型, 管理着Data数据的增删以及变化事件派发, HT框架所有组件都是通过绑定DataModel,以不同的形式呈现到用户界面; 同时组件也会监听DataModel模型的变化事件, 实时同步更新界面数据信息, 掌握了DataModel的操作就掌握了所有组件的模型驱动方式。

Methods

a(name, value) → {Object}

获取或设置attr属性,仅有一个参数时相当于getAttr,有两个参数时相当于setAttr

Parameters:
Name Type Argument Description
name String

属性名

value Object <optional>

属性值

Returns:
Type
Object

add(data, index)

增加数据元素

Parameters:
Name Type Argument Description
data ht.Data

数据元素

index Number <optional>

插入索引

addDataModelChangeListener(listener, scope, ahead)

增加数据模型增删变化事件监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.addDataModelChangeListener(function(event) {
     //event格式:
     {
     	kind: "add"|"remove"|"clear",//事件类型
     	data: data//事件相关data
     }
});

addDataPropertyChangeListener(listener, scope, ahead)

增加模型中Data元素属性变化事件监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.addDataPropertyChangeListener(function(event) {
     //event格式:
     {
     	property: "name",//发生变化的属性
     	data: data,//属性发生变化的data
     	oldValue: 0,//旧值
     	newValue: 1//新值
     }
});

addHierarchyChangeListener(listener, scope, ahead)

增加监听器,监听Data在DataModel中的层次(用于TreeView、TreeTableView等)变化事件

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.addHierarchyChangeListener(function(event) {
     //event格式:
     {
     	data: data,//事件相关Data
     	oldIndex: 0,//旧层次
     	newIndex: 1//新层次
     }
});

addIndexChangeListener(listener, scope, ahead)

增加监听器,监听Data在DataModel中的索引(用于拓扑组件)变化事件

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

Example
 dataModel.addIndexChangeListener(function(event) {
     //event格式:
     {
     	data: data,//事件相关Data
     	oldIndex: 0,//旧索引
     	newIndex: 1//新索引
     }
});

clear()

删除容器中所有Data对象,该操作一次性清空,没有逐个remove的过程,不会影响Data父子关系

contains(data) → {Boolean}

判断容器是否包含该data对象

Parameters:
Name Type Description
data ht.Data

要判断的数据元素

Returns:

容器是否包含参数data

Type
Boolean

deserialize(json, rootParent, setId) → {ht.List}

反序列化数据到数据容器

Parameters:
Name Type Description
json String

要被反序列化的json字符串

rootParent ht.Data

指定反序列化的数据元素的父元素

setId Boolean

反序列化后的数据元素是否保留原id

Returns:

被反序列化的数据元素集合

Type
ht.List

each(func, scope)

提供一个回调函数遍历此容器

Parameters:
Name Type Argument Description
func function

遍历函数

scope Object <optional>

函数域

Example
 dataModel.each(function(data) {
  console.log(data);
});

eachByBreadthFirst(func, data, scope)

以data为起始广度优先遍历Data对象

Parameters:
Name Type Argument Description
func function

遍历函数

data ht.Data <optional>

遍历起点元素

scope Object <optional>

函数域

eachByDepthFirst(func, data, scope)

以data为起始深度优先遍历Data对象

Parameters:
Name Type Argument Description
func function

遍历函数

data ht.Data <optional>

遍历起点元素

scope Object <optional>

函数域

getAttr(name) → {Object}

获取attr属性

Parameters:
Name Type Description
name String

属性名

Returns:
Type
Object

getAttrObject() → {Object}

获取attr属性对象,该属性默认为空,用于存储用户业务信息

Returns:

attr属性对象

Type
Object

getDataById(id) → {ht.Data}

根据id快速查找Data对象,模型内部维护着一个id->data的映射表,因此查找速度比遍历方式快

Parameters:
Name Type Description
id String | Number

要查找的id

Returns:

查找到的Data

Type
ht.Data

getDataByTag(tag) → {ht.Data}

根据tag快速查找,模型内部维护着一个tag->data的映射表,因此查找速度比遍历方式快

Parameters:
Name Type Description
tag String | Number

要查找的tag

Returns:

查找到的Data

Type
ht.Data

getDatas() → {ht.List}

获取所有添加到容器的Data数据集合

Returns:
Type
ht.List

getHistoryManager() → {ht.HistoryManager}

获取历史管理器

Returns:
Type
ht.HistoryManager

getRoots() → {ht.List}

获取所有parent为空的Data对象

Returns:
Type
ht.List

getSelectionModel() → {ht.SelectionModel}

获取该容器的选择模型

See:
Returns:
Type
ht.SelectionModel

getSerializableAttrs() → {Object}

此函数返回一个map,决定序列化时哪些attr属性可被序列化,默认所有attr对象里的属性都会被序列化

Returns:

需要被序列化的attr属性map

Type
Object
Example
 function(){
    var name, map = {};
    for (name in this._attrObject) {            
        map[name] = 1;
    }
    return map; 
}

getSiblings(data) → {ht.List}

获取和data同父子层次的兄弟数组,如果data父亲为空,则返回dataModel.getRoots()

Parameters:
Name Type Description
data ht.Data

目标data

Returns:
Type
ht.List

isAutoAdjustIndex() → {Boolean}

是否自动调整data在容器中索引顺序

Returns:
Type
Boolean

isEmpty() → {Boolean}

判断容器是否为空

Returns:
Type
Boolean

md(listener, scope, ahead)

增加模型中Data元素属性变化事件监听器,addDataPropertyChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.md(function(event) {
     //event格式:
     {
     	property: "name",//发生变化的属性
     	data: data,//属性发生变化的data
     	oldValue: 0,//旧值
     	newValue: 1//新值
     }
});

mh(listener, scope, ahead)

增加监听器,监听Data在DataModel中的层次(用于TreeView、TreeTableView等)变化事件,addHierarchyChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.mh(function(event) {
     //event格式:
     {
     	data: data,//事件相关Data
     	oldIndex: 0,//旧层次
     	newIndex: 1//新层次
     }
});

mm(listener, scope, ahead)

增加数据模型增删变化事件监听器,addDataModelChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

ahead Boolean <optional>

是否将当前监听器插入到监听器列表开头

See:
Example
 dataModel.mm(function(event) {
     //event格式:
     {
     	kind: "add"|"remove"|"clear",//事件类型
     	data: data//事件相关data
     }
});

moveDown(data)

移动data到同层兄弟数组中的下一个位置

Parameters:
Name Type Description
data ht.Data

要移动的数据元素

moveSelectionDown(sm)

移动当前选中的数据元素到同层兄弟数组中的下一个位置

Parameters:
Name Type Argument Description
sm ht.SelectionModel <optional>

要操作的选中模型,如果为空,使用dataModel自身绑定的选中模型

moveSelectionToBottom(sm)

移动当前选中的数据元素到同层兄弟数组的底部

Parameters:
Name Type Argument Description
sm ht.SelectionModel <optional>

要操作的选中模型,如果为空,使用dataModel自身绑定的选中模型

moveSelectionToTop(sm)

移动当前选中的数据元素到同层兄弟数组的顶部

Parameters:
Name Type Argument Description
sm ht.SelectionModel <optional>

要操作的选中模型,如果为空,使用dataModel自身绑定的选中模型

moveSelectionUp(sm)

移动当前选中的数据元素到同层兄弟数组中的上一个位置

Parameters:
Name Type Argument Description
sm ht.SelectionModel <optional>

要操作的选中模型,如果为空,使用dataModel自身绑定的选中模型

moveTo(data, newIndex)

移动数据元素到同层兄弟数组中的指定索引

Parameters:
Name Type Description
data ht.Data

要移动的数据元素

newIndex Number

目标索引

moveToBottom(data)

移动数据元素到同层兄弟数组的底部

Parameters:
Name Type Description
data ht.Data

要移动的数据元素

moveToTop(data)

移动数据元素到同层兄弟数组的顶部

Parameters:
Name Type Description
data ht.Data

要移动的数据元素

moveUp(data)

移动数据元素到同层兄弟数组中的上一个位置

Parameters:
Name Type Description
data ht.Data

要移动的数据元素

onAdded(data)

数据元素添加的回调函数,可重载做后续处理

Parameters:
Name Type Description
data ht.Data

新添加的数据元素

onDataPropertyChanged(data, e)

数据元素属性变化回调函数,可重载做后续处理

Parameters:
Name Type Description
data ht.Data

发生变化的数据元素

e Object

事件信息

onRemoved(data)

数据元素删除时回调函数,可重载做后续处理

Parameters:
Name Type Description
data ht.Data

被删除的数据元素

remove(data)

删除数据元素,该操作有以下副作用:

  • 其子孙被递归从DataModel中删除
  • 被断开父子关系data.setParent(null)
  • Edge类型通过edge.setSource(null)和data.setTarget(null)断开节点关系
  • Node类型会将其关联的连线从DataModel中删除
  • Node类型通过data.setHost(null)断开与宿主吸附节点关系
Parameters:
Name Type Description
data ht.Data

要删除的数据元素

removeDataById(id)

通过id删除数据元素

Parameters:
Name Type Description
id Number

要删除的数据元素id

See:

removeDataByTag(tag)

通过tag删除数据元素

Parameters:
Name Type Description
tag String

要删除的数据元素tag

See:

removeDataModelChangeListener(listener, scope)

删除数据模型增删变化事件监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:

removeDataPropertyChangeListener(listener, scope)

删除模型中Data元素属性变化事件监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:

removeHierarchyChangeListener(listener, scope)

删除监听Data在DataModel中的层次(用于TreeView、TreeTableView等)变化事件的监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:

removeIndexChangeListener(listener, scope)

删除监听Data在DataModel中的索引(用于拓扑组件)变化事件的监听器

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

sendToBottom(data)

将data在拓扑上置底

Parameters:
Name Type Description
data ht.Data

要置底的数据元素

sendToTop(data)

将data在拓扑上置顶

Parameters:
Name Type Description
data ht.Data

要置顶的数据元素

serialize(space)

将数据模型序列化成JSON格式字符串

Parameters:
Name Type Description
space Number

缩进空格数

setAttr(name, value)

设置attr属性

Parameters:
Name Type Description
name String

属性名

value Object

属性值

setAttrObject(attrObject)

设置attr属性对象,该属性默认为空,用于存储用户业务信息

Parameters:
Name Type Description
attrObject Object

attr属性对象

setAutoAdjustIndex(autoAdjustIndex)

设置是否自动调整data在容器中索引顺序

Parameters:
Name Type Description
autoAdjustIndex Boolean

是否自动调整data在容器中索引顺序

size() → {Number}

返回当前容器中Data对象的总数

Returns:
Type
Number

sm() → {ht.SelectionModel}

获取该容器的选择模型

See:
Returns:
Type
ht.SelectionModel

toDatas(matchFunc, scope) → {ht.List}

以matchFunc为过滤函数构建新的元素集合并返回

Parameters:
Name Type Argument Description
matchFunc function <optional>

过滤函数

scope Object <optional>

函数域

Returns:

元素集合

Type
ht.List

toJSON() → {Object}

将数据模型序列化成JSON格式对象

Returns:

JSON对象

Type
Object

umd(listener, scope)

删除模型中Data元素属性变化事件监听器,removeDataPropertyChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:

umh(listener, scope)

删除监听Data在DataModel中的层次(用于TreeView、TreeTableView等)变化事件的监听器,removeHierarchyChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:

umm(listener, scope)

删除数据模型增删变化事件监听器,removeDataModelChangeListener的缩写

Parameters:
Name Type Argument Description
listener function

监听器函数

scope Object <optional>

监听器函数域

See:
欢迎交流 service@hightopo.com