canvas 测量动态对象更新值
canvas gauge dynamic object update value
我正在使用这里的 Canvas-gauge canvas-gauges.com
我按如下方式在循环中动态创建多个仪表(循环未显示);
<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 中,我 post each/all $device_pk 值和返回的结果是 json 格式为 {"gauge_8":"22.3","gauge_12":"0","gauge_15":"-5"}
的字符串,然后我执行
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;
中以通过单击按钮发生,它可以工作并更新仪表。
我确定问题在于我尝试更新动态创建的仪表对象(它们是对象吗?)的方式或我创建它们的方式,但我几乎放弃了。
没有你所有的代码,很难知道答案,所以我会猜答案。
您的设置代码
<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
分配一个对仪表对象的引用。按原样阅读这将引用全局范围,即 window
因此你正在这样做
window["gauge_" + "<?php echo $device_pk; ?>"] = new RadialGauge({
renderTo: 'canvas_<?php echo $device_pk; ?>',
height: 200,
.....other properties here.....
}).draw();
如果 window 不是正确的范围,则使用答案 this
底部的任何对象
然后当您根据下载的数据设置仪表时
success : function(result) {
var data = $.parseJSON(result);
$.each(data, function (k,v) {
console.log(k + ' is ' + v);
k['value']= Number(v);
});
},
你说控制台日志输出 "gauge_23 is 10" 如果解析的 json 对象是 {guage_23 : "10"}
这意味着 k
是一个字符串。您正在将 属性 value
添加到字符串 k
广告中,并为其分配 10
。
假设您的设置代码是 运行 在全球范围内,并且仪表是 window 的属性,您可以将代码更改为
$.each(data, function (k,v) {
window[k].value = Number(v); // window or whatever the this was
});
我假设您需要在设置值后更新仪表,但我将其留给您。
我正在使用这里的 Canvas-gauge canvas-gauges.com
我按如下方式在循环中动态创建多个仪表(循环未显示);
<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 中,我 post each/all $device_pk 值和返回的结果是 json 格式为 {"gauge_8":"22.3","gauge_12":"0","gauge_15":"-5"}
的字符串,然后我执行
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;
中以通过单击按钮发生,它可以工作并更新仪表。
我确定问题在于我尝试更新动态创建的仪表对象(它们是对象吗?)的方式或我创建它们的方式,但我几乎放弃了。
没有你所有的代码,很难知道答案,所以我会猜答案。
您的设置代码
<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
分配一个对仪表对象的引用。按原样阅读这将引用全局范围,即 window
因此你正在这样做
window["gauge_" + "<?php echo $device_pk; ?>"] = new RadialGauge({
renderTo: 'canvas_<?php echo $device_pk; ?>',
height: 200,
.....other properties here.....
}).draw();
如果 window 不是正确的范围,则使用答案 this
底部的任何对象
然后当您根据下载的数据设置仪表时
success : function(result) {
var data = $.parseJSON(result);
$.each(data, function (k,v) {
console.log(k + ' is ' + v);
k['value']= Number(v);
});
},
你说控制台日志输出 "gauge_23 is 10" 如果解析的 json 对象是 {guage_23 : "10"}
这意味着 k
是一个字符串。您正在将 属性 value
添加到字符串 k
广告中,并为其分配 10
。
假设您的设置代码是 运行 在全球范围内,并且仪表是 window 的属性,您可以将代码更改为
$.each(data, function (k,v) {
window[k].value = Number(v); // window or whatever the this was
});
我假设您需要在设置值后更新仪表,但我将其留给您。