Javascript 异步添加到主干模型阵列

Javascript 异步添加到主干模型阵列,javascript,jquery,backbone.js,requirejs,Javascript,Jquery,Backbone.js,Requirejs,当我的模型改变时,我使用主干来改变我的图表+依赖框架需要js。但当我通过ajax更新每个模型并将点对象推送到值数组时,就会出现问题,因为每个传感器都包含来自其他传感器的点 我有4个型号:传感器,型号定义部分: define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { var Sensor = Backbone.Model.extend({ defaults: {

当我的模型改变时,我使用主干来改变我的图表+依赖框架需要js。但当我通过ajax更新每个模型并将点对象推送到值数组时,就会出现问题,因为每个传感器都包含来自其他传感器的点

我有4个型号:传感器,型号定义部分:

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
    var Sensor = Backbone.Model.extend({
        defaults: {
            id: undefined,
            value: undefined,
            lastTime: undefined,
            values: [], 
        }
    }
我有
setInterval
,在这里我运行函数
updateAllSensors
,比如:

updateAllSensors: function() {
    for (var sensId in this.elements.sensors) {
        var element = this.elements.sensors[sensId];
        this.updateSensor(element);
    }
    //console.log("charts");
    //this.updateAllCharts();
},

updateSensor: function(sensorModel) {
    var data = {};
    if (!sensorModel) {
        return;
    }
    var sensorId = sensorModel.get('id');
    var sensor = $('#' + sensorId);
    if (!sensor)
    return;
    $.ajax({
        type: "GET",
        url: sensorModel.getDbUrl(),
        success: function(data) {
            var arrayOfData = data.split(',');
            var value = parseFloat(
                arrayOfData[arrayOfData.length - 1]);
            var sensorDiv = sensor.find(".sensorVal")[0];
            sensorDiv.innerHTML = value.toFixed(1);
            var now = new Date;
            var lastTime = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());

            //if (sensorModel.get('values').length > 10) {
                //sensorModel.get('values').shift();
            //}
            console.log(sensorModel.get('values'));
            sensorModel.get('values').push({
                x: lastTime,
                y: value
            });
            sensorModel.set({
                'value': value,
                'lastTime': lastTime,
            });
        }
    })
},
当我尝试更新一个传感器时,它会将新的点放入模型的值数组中,但当我查看回溯时,我发现所有传感器的值数组都是相等的,并且包含所有数组中的点。这意味着每个sensor.values数组包含来自所有传感器的所有点的集合

4个传感器上的值说明:

首次运行:

sensor1 values: 8 points (I want 1 point to sensor.values)
sensor2 values: 8 points (should be 1 point)
sensor3 values: 8 points (1 point)
sensor4 values: 8 points
在推送到阵列之前,先输入console.log

传感器2

[] 
传感器1

[{"x":1396449826635,"y":17.59441566467285},{"x":1396449826635,"y":17.59441566467285}] 
传感器3

[{"x":1396449826658,"y":18.09109687805176},{"x":1396449826635,"y":17.59441566467285},
{"x":1396449826635,"y":17.59441566467285},{"x":1396449826658,"y":18.09109687805176}] 
传感器4

[{"x":1396449826687,"y":17.69054794311523},{"x":1396449826658,"y":18.09109687805176},
{"x":1396449826635,"y":17.59441566467285},{"x":1396449826635,"y":17.59441566467285},
{"x":1396449826658,"y":18.09109687805176},{"x":1396449826687,"y":17.69054794311523}] 
第二次运行:

sensor1 values: 16 points
sensor2 values: 16 points
sensor3 values: 16 points
sensor4 values: 16 points
等等

如果你需要我提供的小提琴,只要写下评论就行了


提前感谢。

当使用
默认值时,它只是在
传感器的每个实例上共享相同的

:

记住,在JavaScript中,对象是通过引用传递的,所以如果 如果包含一个对象作为默认值,它将在所有用户之间共享 实例。相反,将默认值定义为函数

您需要确保
传感器的每个实例都有一个不同的数组:

var Sensor = Backbone.Model.extend({
  defaults: {
    id: undefined,
    value: undefined,
    lastTime: undefined,
    values: function () {
      return [];
    }
  }
}

请提供小提琴,看不到错误