2017-09-13 22 views
2

我有这样的JavaScript函数(它是在.jade文件虽然我相当肯定,没有任何区别):重写功能,因此它可以在旧的浏览器

function setStopCommand(path, row) 
    { 
     if (row.sensor_active == 1) 
     { 
      var id = row.sensor_id; 
      var editSensorId_id = 'edit_sensor_id_' + id; 
      var editIpAddress_id = 'edit_ip_address_' + id; 
      var controlSelect_id = 'control-select_'+ id; 

      var params = 
      { 
       [editSensorId_id] : row.sensor_id, 
       [editIpAddress_id] : row.sensor_ip, 
       [controlSelect_id] : 4 
      }; 
      console.log(JSON.stringify(params)); 

      post(path, params); 
     } 
    } 

这工作正常一个现代(最新版本的Chrome)浏览器。该字符串化的输出与此类似(该ID可以根据对什么是发送命令更改):

{"edit_sensor_id_0C-29-ED-C7-DA":"0C-29-ED-C7-DA","edit_ip_address_0C-29-ED-C7-DA":"192.168.226.131","control-select_0C-29-ED-C7-DA":4} 

然而,这并不在一个很旧版本的Chrome,我们正在使用的嵌入式工作设备和升级Chrome是不可能的。

如何才能达到相同的效果,但符合较旧的浏览器?我无法改变输出 - 这是模仿命令来自旧系统。

StackOverflow上可能有一个答案,但由于我不知道该技术的名称是什么,我无法搜索它。

回答

3

旧版浏览器不支持的问题是computed object properties,Chrome在版本49.0中增加了对它们的支持。
您可以使用较早的语法轻松绕过此问题:

var id = row.sensor_id; 
var editSensorId_id = 'edit_sensor_id_' + id; 
var editIpAddress_id = 'edit_ip_address_' + id; 
var controlSelect_id = 'control-select_' + id; 

var params = {}; 
params[editSensorId_id] = row.sensor_id; 
params[editIpAddress_id] = row.sensor_ip; 
params[controlSelect_id] = 4; 
相关问题