我有以下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/