项目中需要用到仪器仪表的界面来显示实时的采集信息值,于是便遍地寻找,参考了fusionchart和anychart之后,发现都是收费的,破解的又没有这些功能,只好作罢。之后又找遍了JQuery的插件,也没有找到,于是在灰心之时,Dojo的demo界面让我欣喜若狂:Graphics, Charting and Vizualization 看罢之后,就决定采用Dojo了。

基础知识概览

这篇文章,主要讲解如何利用Dojo原生的仪器仪表界面(Dojo有很强大的绘图功能,后期如果有机会,会分享自绘的仪器仪表界面),来通过Ajax实现采集的数据实时传送给仪表显示。

首先,开始编码之前,需要的东西就是DOJO包:Dojo Toolkit Release,下载之后解压出来,拷贝到项目中即可。项目文件很多,你不需要的功能可以自己去掉。这次我们使用的东西在Dojox包下面。

这里简单介绍下每个目录中的不同内容(如果有误,还请纠正):

dojo目录下的是支撑运行的基础类库定义。

dijit目录下则是众多的插件。

dojox目录下则是第三方自行开发的插件。

而这次我们得东西则是放在了dojox/dgauges目录下面,下面开始进入编码阶段。

操作步骤

首先,我们需要引入dojo.js:

<script src="Dojo/dojo/dojo.js" type="text/javascript" data-dojo-config="parseOnLoad: true, async:true"></script>

引入的时候,我加入了parseOnLoad和async两个config节点,对于前者,能够自动引入相关的js文件,无需一个一个的添加。对于后者则是开启异步模块加载。

然后,我们可以利用require关键字引入需要的资源文件:

require(["dojo/ready", "dojo/dom", "dojox/dgauges/components/default/CircularLinearGauge", "dojox/dgauges/GaugeBase"])

再之后,我们就可以在画板上画出这个圆形仪表:

  function(ready, dom, CircularLinearGauge, GaugeBase) {
linearGauge = new CircularLinearGauge({value:publicVariable, animationDuration:1200}, dom.byId("CircularGauge"));
}

所需要的html代码仅仅是一个div而已:

<div id="CircularGauge"   style="width:200px;height:200px" ></div>

这样,当我们画出来的时候,就会出现如图所示的效果:

看上去是不是很容易呢?

但是,如何和Asp.net后台通过Ajax交互呢?

由于我比较喜欢Jquery,所以这里我决定采用Jquery的Ajax方式和Asp.net后台进行交互,请看代码:

 var TriggerBackendData=function(){
$.ajax({
url:'Ajax/GaugeManager.asmx/ReturnBusinessData',
type:'post',
contentType: "application/json", //from backend
dataType: "json", // send to backend
data:'{}',
success:function(result){
linearGauge.set("value", result.d);
linearGauge.refreshRendering();
},
error:function(data){
alert('Request Data Failure.');
}
});
}

由于是测试,所以在后台,我就简简单单返回来一个随机数字:

using System;
using System.ComponentModel;
using System.Web.Services; namespace DojoDaemon.Ajax
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class GaugeManager : System.Web.Services.WebService
{
[WebMethod]
public int ReturnBusinessData()
{
Random ran = new Random();
return ran.Next(, );
}
}
}

这样,在前台,当我们设定为3s更新一次界面的时候,我们就可以看到仪表忽左忽右的随着获取的数据动态的转动了,下面是完整的代码部分:

   require(["dojo/ready", "dojo/dom", "dojox/dgauges/components/default/CircularLinearGauge", "dojox/dgauges/GaugeBase"],
function(ready, dom, CircularLinearGauge, GaugeBase) {
linearGauge = new CircularLinearGauge({value:publicVariable, animationDuration:1200}, dom.byId("CircularGauge"));
setInterval(TriggerBackendData, 3000);
});

更多图形

当然,系统中还自带了其他三种图形,我都一并列举到下面:

半圆形仪表:

    require(["dojo/ready", "dojo/dom", "dojox/dgauges/components/classic/SemiCircularLinearGauge", "dojox/dgauges/GaugeBase"],
function(ready, dom, SemiCircularLinearGauge, GaugeBase) {
semiGauge = new SemiCircularLinearGauge({value:publicVariable, animationDuration:1200}, dom.byId("CircularGauge2")); setInterval(function() {
var randomValue = Math.floor((Math.random() * 100) + 1);
semiGauge.set("value", randomValue);
semiGauge.refreshRendering();
}, 1000);
});

横向刻度尺:

    require(["dojo/ready", "dojo/dom", "dojox/dgauges/components/classic/HorizontalLinearGauge", "dojox/dgauges/GaugeBase"],
function(ready, dom, HorizontalLinearGauge, GaugeBase) {
horizontalGauge = new HorizontalLinearGauge({value:publicVariable,Maximum:120,Minimum:0,animationDuration:1200}, dom.byId("HGauge3")); setInterval(function() {
var randomValue = Math.floor((Math.random() * 100) + 1);
horizontalGauge.set("value", randomValue);
horizontalGauge.refreshRendering();
}, 1000);
});

纵向刻度尺:

     require(["dojo/ready", "dojo/dom", "dojox/dgauges/components/default/VerticalLinearGauge", "dojox/dgauges/GaugeBase"],
function(ready, dom, VerticalLinearGauge, GaugeBase) {
verticalGauge = new VerticalLinearGauge({value:publicVariable,Maximum:120,Minimum:0,animationDuration:1200}, dom.byId("VGauge4")); setInterval(function() {
var randomValue = Math.floor((Math.random() * 100) + 1);
verticalGauge.set("value", randomValue);
verticalGauge.refreshRendering();
}, 1000);
});

源码下载

点击这里下载源码

Asp.net与Dojo交互:仪器仪表实现的更多相关文章

  1. Prolog学习:基本概念 and Asp.net与Dojo交互:仪器仪表实现

    Asp.net与Dojo交互:仪器仪表实现 项目中需要用到仪器仪表的界面来显示实时的采集信息值,于是便遍地寻找,参考了fusionchart和anychart之后,发现都是收费的,破解的又没有这些功能 ...

  2. Asp.net--Ajax前后台数据交互

    转自:http://www.cnblogs.com/guolebin7/archive/2011/02/22/1961737.html 代码由前后台两部分组成: 前台:(新建一个Default.asp ...

  3. Asp.net 与 jsp 交互 (打开或跳转页面)

    //// 打开固定大小窗体 Response.Write("<script>window.open('Tree1_edit.aspx','child','width=300,he ...

  4. Asp.net与Flex交互测试记录

    一.利用asp.net为Flex提供数据服务,flex为前端表现. 二.flex通过三种方式四种代码实现来取数据.分别为     HttpService. WebService. RemoteObje ...

  5. 水电表/燃气表/压力表/传感器/仪器仪表等,超低功耗段码LCD液晶显示驱动IC-VKL144A/B 超低工作电流,36*4COM显示,替代PCF8551/MCP144/BU9792/9B92/BL55072B等

    煤气罐的使用安全隐患较大,现在大部分城市使用管道输送燃气,燃气表的计费大都是通过远程抄表的方式,或者充值的方式,为了让用户更好地了解自家燃气表的使用情况,需要一款液晶屏来显示燃气表的状态和用气量等信息 ...

  6. ASP.Net简单的交互案例

    控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  7. [转]ASP.NET应用程序生命周期趣谈(一)

    这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...

  8. .NET/ASP.NET Routing路由(深入解析路由系统架构原理)

    阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4 ...

  9. 关于asp.net与jquery ajax 的一些补充

    补充1:asp.net 与后台交互除了用之前写得$.ajsx()外 还可以直接使用$.get()  , $.post()等. 补充2:jquery 跨域请求 例如: JSONP 跨域: $.ajax( ...

随机推荐

  1. Mac下安装Django

    用到一个Python写的后台服务,需要用到Django,参考Django安装文档,配置过程如下: 1.下载一个用来安装和管理Python包的工具“pip”; 2.下载完成后,运行安装脚本,注意需要管理 ...

  2. java集合 之 Collection和Iterator接口

    Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...

  3. ASP出500错误怎么办(理论上并不止500错误,其他错误可以同样可以获得更多信息以帮助解决问题)

    造成500错误常见原因有:ASP语法出错.ACCESS数据库连接语句出错.文件引用与包含路径出错.使用了服务器不支持的组件如FSO等. 为了定位500错误的具体原因,可以这样做: 让IE显示详细的出错 ...

  4. MySQL 如何修改字符集 utf8 改为 utf8mb4

    在实行sql server 向 mysql 迁移数据时,报错: Incorrect string value: '\xF0\x9F\x98\x8A' 原因是mysql 采用的是 utf8 的字符集,而 ...

  5. 【原创】大众点评监控平台cat的性能分析

    由于工作的原因,或者说我们之前内部监控设计和实现有点不满足现有的研发需求,所以调研了一下大众点评开源出来的cat这一套监控系统. 今天我们就来实验一把,cat的客户端埋点在我们的程序流程中上报数据到c ...

  6. 对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?

    第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...

  7. 重载 && 重载递增递和减运算符

    class Rule { private: double m_Length; public: explicit Rule(double lg = 1.0) :m_Length{ lg }{} Rule ...

  8. Java 嵌套解析 json

    1.首先需要安装org.json.jar 2.类JSONObject用于创建一个json对象.其中的JSONObject.put(KEY, VALUE)用于向其中添加条目 3.JSONObject.g ...

  9. 矩阵乘法 codevs 1287 矩阵乘法

    1287 矩阵乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象 ...

  10. Dubbo架构设计详解(转自shiyanjun.cn)

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...