我在聚合物元素中有以下回调,仅当接收到具有特定dataid值的数据时才应触发。

Polymer({
    is: 'widget-singlevalue',
    properties: {
        dataid: {
            type: String
        },
        value: {
            type: String,
            value: 'Loading'
        },
        sparks: {
            type: Object,
            value: []
        }
    },
    ready: function() {
        console.log(this.dataid);
        var self = this;
        registerCallback(this.dataid, function (data) {
            var y = data.data[0];
            var i = y[Object.keys(y)[0]];
            self.push('sparks', i);
            console.log(self.dataid + ": " + self.sparks);
            self.value = i;
        });
    }
});


元素:

<widget-singlevalue name="Retrieves Per Minute" dataid="AvgRetPerMin"></widget-singlevalue>

<widget-singlevalue name="Total" dataid="Total"></widget-singlevalue>


value似乎总是正确的,但是当我查看每个小部件/元素上的sparks数组时,它们混杂在一起。这是我当前的控制台输出:

AvgRetPerMin: 63.81,63.81,14891940,14891940,57.67,57.67,14892034,14892034,57.33,57.33
Total: 63.81,14891940,14891940,57.67,57.67,14892034,14892034,57.33,57.33,14892034


Total.Spark的值只能在1400万范围内,其他值应为两位数并带有小数。

最佳答案

您的代码中很少出现的错误是


sparks typeObject,但valueArray。因此将sparks类型更改为Array
对于数组和对象,都使用函数返回值。根据Polymer的建议,它始终使用函数返回Object和Arrays的值。其背后的原因是,该元素的每个实例都有自己的对象/数组副本

value:function(){
        return []
      }

09-27 09:30