TypeError: invalid 'in' operand a error when calling jQuery each inside RequireJS module
TypeError: invalid 'in' operand a error when calling jQuery each inside RequireJS module
我有以下 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: 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":[]}}
我通过注释掉其他所有内容,将错误追溯到那一行。那行不正确的是什么?
在这次通话中:
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。
我有以下 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: 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":[]}}
我通过注释掉其他所有内容,将错误追溯到那一行。那行不正确的是什么?
在这次通话中:
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。