TWaver图形之道(七)TWaver开发流程

2024-04-28 14:32

本文主要是介绍TWaver图形之道(七)TWaver开发流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TWaver开发流程

TWaver是一种前台解决方案,它的地位在系统多层结构的UI层,开发的过程通常是:数据采集,数据转化,视图关联,界面交互,业务操作,然后重复这个过程。

下面用代码来说明这个过程,以TWaver Flex为例:

整体结构

首先看示例代码的整体结构,创建了一个拓扑图组件,设置好宽高布局,在程序初始化完成后,调用init()函数,注册了两个图片,然后进行网元数据的填充,对于实际应用可能是通过一次HTTPService请求,得到数据后再进行数据的添加。

TWaver Flex开发流程 - 示例代码

<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"xmlns:twaver="http://www.servasoftware.com/2009/twaver/flex"pageTitle="Development Process" applicationComplete="init()"><mx:Script><![CDATA[import component.InputDialog;import twaver.*;import twaver.network.Network;import twaver.network.interaction.InteractionEvent;import twaver.network.layout.AutoLayouter;[Embed(source="images/device.png")]public static const deviceImage:Class;[Embed(source="images/router.png")]public static const routerImage:Class;private var box:ElementBox;private function init():void{Utils.registerImageByClass('router', routerImage);Utils.registerImageByClass('device', deviceImage);...//代码片段A}...//代码片段B]]></mx:Script><twaver:Network id="network" backgroundColor="0xFFFFFF" width="100%" height="100%"/></mx:Application>

数据填充

下面看如何添加网元数据,代码片段A中模拟了开发流程的步骤,分数据采集;数据转换;网元布局;添加交互四步骤:

首先是数据采集,这里模拟了一堆设备和关系的集合,真实系统数据通常从后台获取而来。模拟数据包含业务属性,比如名称,图标,性能参数等,需要转换成TWaver网元对象才能在拓扑图中呈现;

然后进行数据转换,将这些模拟的数据转换成TWaver的网元对象,设备转换成Node类型,关系转换成Link类型,并添加到ElementBox数据容器;

接下来我们执行了一次自动布局,将网元位置分布开,当然你也可以使用后台存储的位置信息;

最后一步添加交互,双击网元时,弹出修改网元名称的对话框,模拟的是数据修改的一个过程,真实系统中,可能需要作入库存储操作。

box = network.elementBox;//数据采集var devices:Array = getDevicesFromOSS();var relationships:Array = getDevicesRelationshipFromOSS();//数据转换translateToTWaverNode(box, devices, relationships);//网元布局var layouter:AutoLayouter = new AutoLayouter(network);layouter.animate = false;layouter.doLayout(Consts.LAYOUT_SYMMETRY);//添加交互network.addInteractionListener(function(evt:InteractionEvent):void{if(evt.kind != InteractionEvent.DOUBLE_CLICK_ELEMENT){return;}var element:IElement = evt.element;//InputDialog是定制的输入对话框组件,详见InputDialog.show(network, "Rename", element.name, function(text:String):void{element.name = text;//入库操作}, evt.mouseEvent.stageX, evt.mouseEvent.stageY);});

TWaver Flex开发流程 - 代码片段A

上面的用到了一个自定的Flex控件InputDialog.MXML,继承于TitleWindow,是一个模式对话框,包含一个文本输入框和一个确认按钮,使用上类似Java Swing的JOptionPane.showInputDialog(...)

InputDialog.show(network, "Rename", element.name, function(text:String):void{element.name = text;//入库操作}, evt.mouseEvent.stageX, evt.mouseEvent.stageY);

TWaver Flex开发流程 - InputDialog.MXML使用示例

InputDialog.MXML代码如下:

<?xml version="1.0" encoding="utf-8"?><mx:TitleWindow xmlns:fx="<a href="http://ns.adobe.com/mxml/2009">http://ns.adobe.com/mxml/2009</a>"xmlns:s="library://ns.adobe.com/flex/spark"xmlns:mx="library://ns.adobe.com/flex/mx" ><fx:Script><![CDATA[import mx.controls.Text;import mx.managers.PopUpManager;var callback:Function = null;// Event handler for the OK button.private function onOK():void {if(this.callback){this.callback(inputText.text);}PopUpManager.removePopUp(this);}private function init(title:String, value:String, callback:Function):void{this.title = title;inputText.text = value;this.callback = callback;}public static function show(frame: DisplayObject, title:String, value:String, callback:Function, x:int = 0, y:int = 0):void{var dialog:InputDialog = InputDialog(PopUpManager.createPopUp( frame, InputDialog , true));if(x && y){dialog.x = x;dialog.y = y;}else{PopUpManager.centerPopUp(dialog);}dialog.init(title, value, callback);}]]></fx:Script><mx:HBox><mx:TextInput id="inputText" width="100%"/></mx:HBox><mx:HBox horizontalAlign="right" defaultButton="{okButton}"><mx:Button label="OK" id="okButton" click="onOK();" /><mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/></mx:HBox></mx:TitleWindow>

TWaver Flex开发流程 - InputDialog.mxml

下面是示例代码片段B的内容,包含模拟数据和转换成TWaver网元类型的代码处理:

private function getDevicesFromOSS():Array{return [{name:'R1', type: 'router'}, {name:'R2', type: 'router'}, {name:'S1', type: 'device'}, {name:'S2', type: 'device'}] ;}private function getDevicesRelationshipFromOSS():Array{return [{name:'1l', from:'R1', to:'R2'}, {name:'2l', from:'R1', to:'S2'}];}private function translateToTWaverNode(box:ElementBox, devices:Array, relationships:Array):void{devices.forEach(function(device:*, index:int, arr:*):void{var node:Node = new Node(device.name);node.name = device.name;node.image = device.type;box.add(node);});relationships.forEach(function(relationship:*, index:int, arr:*):void{var link:Link = new Link(box.getElementByID(relationship.from) as Node, box.getElementByID(relationship.to) as Node);link.name = relationship.name;box.add(link);});}
TWaver Flex开发流程 - 代码片段B运行的效果:

这篇关于TWaver图形之道(七)TWaver开发流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943494

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn