2016-09-22 41 views
0

我有以下RequireJS模塊,我正在使用AmCharts構建圖表。 (爲了簡潔,我刪除了一些代碼)。TypeError:無效'in'操作數內部調用jQuery時出現錯誤RequireJS模塊

define('admin/stats', ['jquery', 'amcharts.serial'], function($, AmCharts) { 

    var historicalStats = { 

     init: function(rawData, axesMarker) { 

      var originalData = rawData, 
      charts = $('#charts'); 

      console.log(originalData); 

      $.each(originalData, function(graphName, config) { 
       // ...call a function in here... 
      }); 

     } 

    }; 

    return historicalStats; 

}); 

這是我如何調用它:用以下

<script type="text/javascript"> 

    require(['admin/stats'], function(stats) { 
     stats.init('{{ data|raw }}', '{{ "graphs.axes.filesize"|trans({}, "admin") }}'); 
    }); 

</script> 

我的問題是該行$.each(originalData, function(graphName, config) {錯誤:

TypeError: invalid 'in' operand a
...w:this,function(a,b){function c(a){var b="length"in a&&a.length,c=_.type(a);retu...

(我使用grunt中縮小了JavaScript的)。

originalData看起來是這樣的:

{"users":{"series":[{"field":"users","title":"Users"}],"type":"raw","axesMarker":"Users","data":[]},"fileusage":{"type":"filesize","axesMarker":"File size","series":[],"data":[]},"dbsize":{"series":[{"field":"dbsize","title":"Database size"}],"type":"filesize","axesMarker":"File size","data":[]}}

我已經被註釋掉一切追查錯誤回,個別行。那條線是不正確的?

回答

1

在此呼籲:

stats.init('{{ data|raw }}', '{{ "graphs.axes.filesize"|trans({}, "admin") }}'); 

你傳遞一個字符串作爲第一個參數。然後$.each試圖尋找"length"在此字符串:"length" in a(其中a被初始化爲相同的值傳遞給stats.init的第一個參數

如果{{ data|raw }}是一個格式正確的JavaScript對象或者JSON,你可以放下報價。然而,我很擔心你在你的代碼中如何複製rawDataoriginalData如果你只是刪除引號並得到一個JavaScript對象,知道如果你在後面的代碼中修改originalData那麼rawData也會有相同的修改因爲你不克隆它,所以如果你想將它從originalData的變化中分離出來,你必須克隆它。再有很多方法克隆,這是最好的,你的情況取決於是不是在你的問題的詳細信息)

另一種可能性是將呼叫離開stats.init原樣,但在函數內部做。

var originalData = JSON.parse(rawData) 

這假定{{ data|raw }}格式正確的JSON。

+0

在''{{data | raw}}'周圍放置'''是解決方案。謝謝。 – crmpicco