通过 Requirejs 传递的未定义对象
Undefined object being passed via Requirejs
我正在使用Requirejs
在我们的Web应用程序中加载JavaScript。问题是我正在将一个undefined
对象传递给一个模块,当在其他模块中使用时,该模块可以完美地实例化。
好的,这是设置。我的main.js
文件需要js在启动时运行:
require.config({
baseUrl: "/scripts",
paths: {
demographics: "Demographics/demographics",
complaints: "Complaints/complaints",
}
});
require(["templates", "demographics", "complaints", "crossDomain"], function (templates, demographics, complaints) {
"use strict";
console.log("0");
console.log(demographics === undefined);
demographics.View.display();
});
在这个问题中,许多配置已被剥离为仅核心文件。
这是Demographics.js
:
define(["ko", "templates", "complaints", "globals", "underscore"], function (ko, templates, complaints, globals) {
// Stuff removed.
return {
View: view
};
});
和Complaints.js
define([
"demographics",
"ko",
"templates",
"complaints",
"visualeffects",
"globals",
"webservice",
"underscore",
"typewatcher",
"imagesloaded"],
function (demographics, ko, templates, complaints, visualeffects, globals, webservice) {
"use strict";
console.log("1");
console.log(demographics === undefined);
return {
View: view
};
});
问题是这样的 - Complaints.js
通过define
配置传递的demographics
参数是undefined
.控制台注销告诉我"人口统计===未定义"是true
。
但是,当 main.js 文件执行时,传递给它的人口统计参数不是未定义的,正如预期的那样,它是一个实例化的对象。
现在我被困住了,因为我不明白为什么complaints.js
人口统计变量是未定义的。任何人都可以发现我错过了什么吗?
你有一个循环依赖关系。 demographics
模块取决于complaints
,complaints
取决于demographics
。 根据文档:
如果你定义了一个循环依赖(a需要b,b需要a),那么在这种情况下,当b的模块函数被调用时,它将得到a的未定义值。
如果无法删除循环依赖项,解决方案是按需异步要求两个模块中的一个在另一个模块中(例如,在实例化视图时,而不是在执行定义视图的模块时)。 同样,文档很好地涵盖了这个主题。
另一种情况是当您在定义模块时不小心键入require
而不是define
时,我花了一些时间才注意到这一点。
我也有类似的问题。就我而言,在定义模块时,我写了:
define('some_dependency', ...
而不是
define(['some_dependency'], ...
另一个可能的原因是实现模块的接口(AMD,CommonJS),但忘记返回任何内容。我只是这样做了。
我刚刚遇到了另一个原因:
define(function () {
return {};
}()); // <-- notice the '()' typo.
这个"错别字"不会导致这个JS错误,并且可能会使弄清楚变得混乱,尤其是在具有许多潜在循环依赖项的复杂应用程序中。
当然,原因是"拼写错误"是有效的JS,它只是调用您定义的函数,从而将其结果传递给define()
而不是预期的函数。
事后看来可能很明显的另一个可能原因是模块代码中的错误。就我而言,我试图从未定义的变量中获取属性。该错误记录在控制台中,但由于某种原因我没有看到它/将其误认为是未定义的模块错误。
- 在setInterval函数之前声明时未定义对象
- 使用+=运算符未定义对象中的第一个元素
- 通过 Requirejs 传递的未定义对象
- JS:防止访问未定义对象的属性时出错
- AngularJs为什么在ng禁用函数上未定义对象
- IE上未定义对象值
- JQuery函数返回一个对象,但它被集成为未定义对象
- AJAX响应带有未定义/对象文档
- 处理未定义对象的内联比三进制更聪明
- JavaScript错误未定义对象,尽管对象存在
- Javascript未定义对象
- 未定义对象子属性的Javascript类型
- Javascript多维数组未定义对象错误
- 在一条语句中获取多个未定义对象中的初始化对象
- Javascript -对象中的未定义对象
- 是否可以像扩展其他对象一样扩展未定义对象
- Java Script Ionic框架中的未定义对象
- if else子句中未定义对象的未定义属性
- 未定义对象方法
- 在JavaScript中使用typeof仍然会导致未定义对象的错误