TWaver HTML5 (2D)----数据元素

概述

数据元素是数据模型的基本要素,用于描述图形网元,业务网元,或者纯数据。TWaver HTML5中所有数据元素都继承自twaver.Data。为不同功能的需求,预定义了三类数据类型:twaver.Element,twaver.Alarm,twaver.Layer,分别用来描述拓扑的网元,告警和图层。其中拓扑网元扩展定义了十几种网元类型,用以描述丰富的拓扑网元特性,其中最常用的几类拓扑网元包括:Node、Link、Group、SubNetwork、Grid等,TWaver中网元的继承关系如下图,本章将详细介绍这些网元以及其他数据类型的特性,使用以及扩展应用。

基本数据元素(Data)

twaver.Data是TWaver HTML5中最基本的数据元素,默认定义了id,name,name2,icon,toolTip,parent,children等基本属性,支持事件派发和监听,由它扩展出来还有twaver.Element,twaver.Alarm,twaver.Layer等数据类型。

事件派发与监听

twaver.Data继承于twaver.PropertyChangeDispatcher类,内部包含一个twaver.EventDispatcher实例对象,这使得Data具有派发事件和监听事件的功能,可以通过调用下面的方法派发事件或者添加监听器:

//派发属性变化事件
firePropertyChange:function(property,oldValue,newValue)
//添加属性变化监听器
addPropertyChangeListener:function(listener,scope,ahead)
//删除属性变化监听器
removePropertyChangeListener:function(listener)
//属性发生变化的处理方法
onPropertyChanged:function(listener)

基本属性

定义了一些基本属性,包括id,name,name2,icon,toolTip等。

/**
 *id:网元的id,如果未设置,TWaver内部会分配唯一的Id。
 */
twaver.Data:function(id)

getId:function()
setName:function(value)
getName:function()
setName2:function(value)
getName2:function()
setIcon:function(value)
getIcon:function()
setToolTip:function(value)
getToolTip:function()

Note:name2为新增加的属性,增大了label设置的灵活性。

如果需要设置其他属性,可以通过setClient()/getClient()方法设置自定义的属性(包括对象)。

//设置Client属性;
setClient = function(clientProp,newValue)
//获取Client属性
getClient = function(clientProp)

Note:setClient()存放数据类似于Java中的HashMap。

示例:

 var box = new twaver.ElementBox();
    var network = new twaver.vector.Network(box);
    function init() {
        initNetwork();
        initDataBox();
    }
    function initNetwork() {
        var view = network.getView();
        document.body.appendChild(view);
        network.adjustBounds({x: 0, y: 0, width: 1300, height: 600});
        network.getToolTip = function (element) {
            var Id = element.getId();
            var name = element.getName();
            var name2 = element.getName2();
            var icon = element.getIcon();
            var clientProperty = element.getClient(‘clientProperty‘);
            return ‘Id:‘ + Id + ‘ ‘ + ‘name:‘ + name + ‘ ‘ + ‘name2:‘ + name2+ ‘ ‘ + ‘icon:‘ + icon;
        }
        twaver.Styles.setStyle(‘label.color‘,‘#ec6c00‘);
        twaver.Styles.setStyle(‘label2.color‘,‘#57ab9a‘);
        twaver.Styles.setStyle(‘select.color‘,‘#ef8200‘);
    }
    function initDataBox() {
        var node = new twaver.Node({ name: ‘from‘, name2: ‘from2‘, location: { x: 300, y: 200 } });
        box.add(node);
        var node2 = new twaver.Node({ name: ‘to‘, name2: ‘to2‘, location: { x: 500, y: 250 } });
        box.add(node2); var link = new twaver.Link(node, node2);
        link.setName(‘Hello TWaver!‘);
        link.setName2(‘Hello Vector!‘);
        link.setClient(‘clientProperty‘,node); box.add(link);
    }

Note:从示例中我们学会了什么?

  • 统一设置样式,如:twaver.Styles.setStyle(‘label.color’,’#ec6c00′)
  • 自定义toolTip的提示语:重写network.getToolTip方法
  • Client属性的使用
  • TWaver内部内置一些颜色,twaver.Colors.***

在这我们特别列举出icon的布局问题,icon作为网元的附件可以围绕在网元的周围,呈现一些特殊信息。TWaver支持多组icon同时存在,且摆放的位置可以分别设置。下面列举使用方法:

function registerImage(){
  registerNormalImage(‘./images/list_view.png‘,‘list_view‘);
  registerNormalImage(‘./images/settings1.png‘,‘setting1‘);
  registerNormalImage(‘./images/ic_mech_wheel.png‘,‘wheel‘);
  registerNormalImage(‘./images/ic_search_archive.png‘,‘archive‘);
  registerNormalImage(‘./images/super_mono.png‘,‘mono‘);
  registerNormalImage(‘./images/twitter_04.png‘,‘twitter‘);
}
function registerNormalImage(url, name) {
  var image = new Image();
  image.src = url;
  image.onload = function() {
    twaver.Util.registerImage(name, image, image.width, image.height);
    image.onload = null;
    network.invalidateElementUIs();
  };
}
function initNode() {
    var node2 = new twaver.Node("node2");
    node2.setLocation(450, 205);
    box.add(node2);
    node2.setName(‘name1‘);
    node2.setName2(‘name2‘);
    node2.setSize(300,300);
    node2.setStyle(‘icons.names‘, [["mono","wheel",‘archive‘],["wheel",‘archive‘,‘mono‘],["archive",‘mono‘],["mono",‘wheel‘]]);
    node2.setStyle(‘icons.position‘, [‘topleft.topleft‘,‘topright.topright‘,‘bottomleft.bottomleft‘,
      ‘bottomright.bottomright‘]);
    node2.s(‘icons.orientation‘,[‘top‘,‘left‘,‘right‘,‘bottom‘]);
}

其他功能函数

此外,Data中还定义了其他功能函数

//获取所有子网元
getChildren:function()
getChildSize:function()
//获取符合macthFunction的所有childs组成的List
toChildren:function(macthFunction,scope)
addChild:function(child,index)
removeChild:function(child)
getChildAt:function(index)
clearChildren:function()
getParent:function()
setParent:function(parent)
hasChildren:function()
isRelatedTo:function(data)
isParentOf:function(data)
isDescendantOf:function(data)
//toChildren:function(macthFunction,scope)的使用方法
parent.toChildren(function(e){
    return e.getName() === ‘vector‘;
});
var box = new twaver.ElementBox();
var network = new twaver.vector.Network(box);
function init() {
  initNetwork();
  registerImage();
  initDataBox();
}
function initNetwork() {
  var view = network.getView();
  document.body.appendChild(view);
  network.adjustBounds({x: 0, y: 0, width: 1300, height: 600});
  twaver.Styles.setStyle(‘select.color‘, ‘#57ab9a‘);
}
function registerImage() {
//register shadow
twaver.Util.registerImage(‘shadow‘, { w: 37, h: 29, shadowOffsetX: 0, shadowOffsetY: 0, shadowBlur: 5, shadowColor: ‘#ec6c00‘, v: [ { shape: ‘vector‘, name: ‘node_image‘, x: 0, y: 0 } ] });
}
function initDataBox() {
  var parent = new twaver.Group({ name: ‘parent‘, location: {x: 300, y: 400 }, });
  box.add(parent);
  var node1 = new twaver.Node({ name: ‘Jeff.fu‘, location: { x: 200, y: 200 } });
  node1.setClient(‘vector‘, true);
  box.add(node1);
  var node2 = new twaver.Node({ name: ‘alex.dong‘, location: { x: 500, y: 350 } });
  node2.setClient(‘vector‘, true); box.add(node2);
  var node3 = new twaver.Node({ name: ‘paul.peng‘, location: { x: 200, y: 350 } }); box.add(node3);
  var node4 = new twaver.Node({ name: ‘vic.cheng‘, location: { x: 500, y: 200 } }); box.add(node4);
  var link = new twaver.Link(node1, node2);
  link.setName(‘link1‘);
  link.setStyle(‘label.position‘,‘topleft.topleft‘);
  box.add(link);
  var link2 = new twaver.Link(node3, node4);
  link2.setName(‘link2‘);
  box.add(link2);
  parent.addChild(node1);
  parent.addChild(node2);
  parent.addChild(node3);
  parent.addChild(node4);
  matchFunction = function (e) {
    if (e.getClient(‘vector‘)) {
      return true;
    }
  }
  var childrenMatch = parent.toChildren(matchFunction);
  childrenMatch.forEach(function (element) {
    element.setImage(‘shadow‘);
    element.setName(‘child_vector‘);
  });
}

Note:上述示例我们学会了什么?

  • toChildren()方法的使用
  • shadow阴影的设置
时间: 2024-08-22 11:57:39

TWaver HTML5 (2D)----数据元素的相关文章

HTML5微数据

本篇文章是一个纯搬运贴,原博主是在是做的太详细了 原贴地址:http://www.zhangxinxu.com/wordpress/2011/12/html5扩展-微数据-丰富网页摘要/ 一.微数据是? 一个页面的内容,例如人物.事件或评论不仅要给用户看,还要让机器可识别.而目前机器智能程度有限,要让其知会特定内容含义,我们需要使用规定的标签.属性名以及特定用法等.举个简单例子,我们使用<h1>标签包裹页面标题信息就是为了让机器识别(搜索引擎 – SEO). 而微数据是什么呢?在我看来,微数据

HTML5 画布canvas元素

HTML5 画布canvas元素 HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小看了这个画布,它能实现无限的可能性.接下来我们从最简单的部分开始,逐步认识Canvas的强大功能. 1.在页面中添加canvas元素: 默认情况下,Canvas所创建的矩形区域大小为宽300像素,高150像素,不过我们可以使用width和height属性来自定义画布

HTML5中canvas元素,绘制圆形

HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. <!DOCTYPE html> <head> <meta charset="UTF-8" /> <script>     function draw(id) {         var canvas = document.getElementById(id);         if (canvas == nu

基于HTML5的数据可视化实现方法解读

现在在大数据的带领下,数据可视化越来越突出,能够清楚的分析出自己想要的数据,这也是我们现在最求的数据可视化方法,那么实现HTML5的数据可视化方法有哪些?这都是我们值得研究的东西,数据可以给我们带来敏感的市场未来发展,同时也能够实时分别不同数据效果. HTML5为数据可视化提供了新的实现方法.本文对HTML5在健康数据可视化在PC及部分移动终端上的应用进行研究.使用HTML5中的Canvas和SVG实现的数据可视化方法基于浏览器的支持,具有很好的平台兼容性 可视化(Visualization)是

HTML5微数据学习笔记

一.微数据的定义 微数据使用来自自定义词汇表的.带作用域的名/值对来给DOM做标记. 自定义词汇表:我们可以将“HTML5中所有元素的集合”看做一个词汇表,这个词汇表包括了可以代表章节或者文章的元素,但是不包括可以代表一个人或者活动的元素,如果要想表示一个“人”,那么就需要定义自己的词汇表,使用微数据就可以定义这样的词汇表. 作用域:微数据的作用域可以参照DOM中的元素之间的自然父子关系,微数据重用了DOM本身的层级结构,提供了一种方式来表达“所有该元素的属性都来自这个词汇表”. 名/值对:每一

在HTML5的画布元素上进行绘画操作

#!usr/bin/env python #-*- coding:utf-8 -*- #在HTML5的画布元素上进行绘画操作 import unittest,time from selenium import webdriver class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_HTML5Canvas(self): url = 'http://www.w3sc

数据元素文本增强(修改标准数据元素描述)

事务代码:CMOD 1. . 2. 3. 4. 5. 数据元素文本增强(修改标准数据元素描述),布布扣,bubuko.com

Matlab 之 数据元素访问

Matlab的含义是矩阵实验室,其特征之一就是数据的向量化操作,借此提升软件运行效率.那么,必然会涉及数据元素的访问.Matlab主要支持下面一些形式的访问: (1)array-inde: A(i) (2)cell-index: C{i} (3)struct field: S.fieldname 不同的访问方式,效率差别很大,我们以单个元素或者域的访问为例,探讨不同的数据结构的访问时间. 一百万次访问的平均时间对比: (1)array-index: 0.002675s (2)cell-index

HTML5 &lt;template&gt;标签元素简介

一.HTML5 template元素初面 <template>元素,基本上可以确定是2013年才出现的.干嘛用的呢,顾名思意,就是用来声明是"模板元素". 目前,我们在HTML中嵌入模板HTML,往往是类似这样的写法: <script type="text/template"> // ... </script> 实际上,并不存在type="text/template"这样的标准写法,<template&g