首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >画布仪表动态对象更新值

画布仪表动态对象更新值
EN

Stack Overflow用户
提问于 2017-03-15 19:14:24
回答 1查看 1.7K关注 0票数 0

我在这里使用Canvas-gauge,canvas-gauges.com

我在一个循环中动态创建了多个仪表,如下所示(循环未显示);

代码语言:javascript
复制
<canvas id="canvas_<?php echo $device_pk; ?>"></canvas>

<script type="text/javascript">
    var gg = "gauge_" + "<?php echo $device_pk; ?>";
    this[gg] = new RadialGauge({
        renderTo: 'canvas_<?php echo $device_pk; ?>',
        height: 200,
        .....other properties here.....
    }).draw();
</script>

正确显示仪表盘。

然后,我想使用javascript/ajax更新仪表值。在ajax中,我发布了每个/所有的json值,返回的结果是一个格式为{"gauge_8":"22.3","gauge_12":"0","gauge_15":"-5"}的$device_pk字符串,然后我就这样做了

代码语言:javascript
复制
success : function(result) {
    var data = $.parseJSON(result);
    $.each(data, function (k,v) {
         console.log(k + ' is ' + v);
         //k.value = v;
         //k.value = Number(v);
         k['value']= Number(v);
     });
 },

它在控制台日志中显示了正确的'k‘和'v’信息,但我不能解决的是如何用数据值‘v’更新名为'k‘的仪表。这通常是使用gauge_23.value = 10.2;完成的,当然,条件是创建的仪表名为“gauge_23”。

只是为了测试,我确定了一个正在显示的仪表盘的正确仪表盘名称,并在gauge_23.value = 10.2;中临时硬编码,以便在单击按钮时发生,它可以工作并更新仪表盘。

我确信问题出在我试图更新动态创建的gauge对象的方式上(它们是对象吗?)或者我创建它们的方式,但我几乎要放弃了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 00:42:31

没有你所有的代码,很难知道答案,所以我将猜测答案。

您的设置代码

代码语言:javascript
复制
<script type="text/javascript">
    var gg = "gauge_" + "<?php echo $device_pk; ?>";
    this[gg] = new RadialGauge({
        renderTo: 'canvas_<?php echo $device_pk; ?>',
        height: 200,
        .....other properties here.....
    }).draw();
</script>

您正在为对象this的属性gauge_23分配一个对仪表对象的引用。按原样阅读这将引用全局作用域,即窗口

因此你正在做这件事

代码语言:javascript
复制
    window["gauge_" + "<?php echo $device_pk; ?>"] = new RadialGauge({
        renderTo: 'canvas_<?php echo $device_pk; ?>',
        height: 200,
        .....other properties here.....
    }).draw();

如果window不是正确的作用域,则使用答案底部的任何对象this

然后,当您从下载的数据设置仪表时,您可以这样做

代码语言:javascript
复制
success : function(result) {
    var data = $.parseJSON(result);
    $.each(data, function (k,v) {
         console.log(k + ' is ' + v);
         k['value']= Number(v);
     });
 },

您可以说,如果解析的json对象是{guage_23 : "10"},那么控制台日志将输出"gauge_23 is 10“,这意味着k是一个字符串。您正在将属性value添加到字符串k中,并为其分配10

假设您的设置代码在glbal范围内运行,并且仪表是window的属性,则可以将代码更改为

代码语言:javascript
复制
    $.each(data, function (k,v) {
         window[k].value = Number(v); // window or whatever the this was
     });

我假设您需要在设置值后更新仪表,但这由您决定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42808163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档