Javascript 画布规格动态对象更新值

Javascript 画布规格动态对象更新值,javascript,php,ajax,canvas,gauge,Javascript,Php,Ajax,Canvas,Gauge,我在这里使用画布规格 我在一个循环中动态创建多个仪表,如下所示(未显示循环) 这会在控制台日志中显示正确的“k”和“v”信息。 我无法解决的是如何用数据值“v”更新名为“k”的仪表。 这通常使用gauge_23.value=10.2当然,前提是创建的仪表称为“仪表23” 为了测试,我为正在显示的仪表确定了正确的仪表名称,并在gauge_23.value=10.2中临时硬编码通过单击按钮发生,它工作并更新仪表 我确信问题在于我试图更新动态创建的仪表对象(它们是对象吗?)的方式,或者我创建它们的方式

我在这里使用画布规格

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

这会在控制台日志中显示正确的“k”和“v”信息。 我无法解决的是如何用数据值“v”更新名为“k”的仪表。 这通常使用
gauge_23.value=10.2当然,前提是创建的仪表称为“仪表23”

为了测试,我为正在显示的仪表确定了正确的仪表名称,并在
gauge_23.value=10.2中临时硬编码通过单击按钮发生,它工作并更新仪表


我确信问题在于我试图更新动态创建的仪表对象(它们是对象吗?)的方式,或者我创建它们的方式,但我刚刚放弃。

没有所有代码,知道答案有点困难,所以我会猜答案

您的设置代码

<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>
如果窗口范围不正确,则使用答案底部的任何对象

然后,当您根据下载的数据设置仪表时

success : function(result) {
    var data = $.parseJSON(result);
    $.each(data, function (k,v) {
         console.log(k + ' is ' + v);
         k['value']= Number(v);
     });
 },
如果解析的json对象是
{guage\u 23:“10”}
,那么控制台日志输出“gauge\u 23是10”,这意味着
k
是一个字符串。您正在向字符串
k
ad添加属性
value
,并将
10
分配给它

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

    $.each(data, function (k,v) {
         window[k].value = Number(v); // window or whatever the this was
     });

我假设您需要在设置值后更新仪表,但我将此留给您。

Hi@Blindman67,谢谢您的“猜测”,这非常有效。更新仪表的实际命令是
gauge\u name.value=number
。杰出的
    window["gauge_" + "<?php echo $device_pk; ?>"] = new RadialGauge({
        renderTo: 'canvas_<?php echo $device_pk; ?>',
        height: 200,
        .....other properties here.....
    }).draw();
success : function(result) {
    var data = $.parseJSON(result);
    $.each(data, function (k,v) {
         console.log(k + ' is ' + v);
         k['value']= Number(v);
     });
 },
    $.each(data, function (k,v) {
         window[k].value = Number(v); // window or whatever the this was
     });