我有以下RequireJS模块,我正在使用它用AmCharts构建图表。 (为简洁起见,我删除了一些代码)。

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:无效的“ in”操作数
  ... w:this,function(a,b){function
  c(a){var b =“ length” in a && a.length,c = _。type(a);还原...


(我正在使用grunt缩小JavaScript)。

originalData看起来像这样:


  {“用户”:{“系列”:[{“字段”:“用户”,“标题”:“用户”}],“类型”:“原始”,“ axesMarker”:“用户”,“数据”: []},“ fileusage”:{“ type”:“ filesize”,“ axesMarker”:“ File
  size“,” series“:[],” data“:[]},” dbsize“:{” series“:[{” field“:” dbsize“,” title“:”数据库
  size“}],” type“:” filesize“,” axesMarker“:”文件大小“,” data“:[]}}


通过注释掉其他所有内容,我将错误追溯到该行。那条不正确的线是什么?

最佳答案

在此通话中:

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


您传递一个字符串作为第一个参数。然后$.each尝试在此字符串中查找"length""length" in a(其中a初始化为与传递给stats.init的第一个参数相同的值。

如果{{ data|raw }}是格式正确的JavaScript对象或JSON,则可以删除引号。但是,我担心您如何在代码中将rawData复制到originalData。如果仅删除引号并获取JavaScript对象,请知道,如果在以后的代码中修改originalData,则rawData也将具有相同的修改,因为您没有克隆它。因此,如果要将其与对originalData的更改隔离开来,则必须对其进行克隆。 (有很多克隆方法,根据您的情况,这最好是取决于问题中没有的细节。)

另一种可能性是按原样保留对stats.init的调用,但在函数内部执行以下操作:

var originalData = JSON.parse(rawData)


假定{{ data|raw }}是正确格式的JSON。

关于javascript - TypeError:在RequireJS模块中分别调用jQuery时,无效的“in”操作数会出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39630716/

10-11 13:51