2017-09-13 66 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;