Asynchronous RequireJS加载一个.js,但是内联代码仍然是异步的吗?
从我看到的使用调试器调用:Asynchronous RequireJS加载一个.js,但是内联代码仍然是异步的吗?,asynchronous,requirejs,Asynchronous,Requirejs,从我看到的使用调试器调用: require(["menu/main-menu"], function(util) { 是否将加载main-menu.js文件,但在执行所需.js文件中的全局代码之前调用该函数?这是正确的吗 如果是这样,在调用函数之前执行所有代码的最佳方法是什么 我试图解决的问题是,我希望mani-menu.js中的代码都在一个模块中。但是,我不能调用该模块中的任何方法,直到其中创建该模块的全局代码被执行 我可以在其中调用一个全局方法,然后创建所有内容,但这需要在每个.js文件中
require(["menu/main-menu"], function(util) {
是否将加载main-menu.js文件,但在执行所需.js文件中的全局代码之前调用该函数?这是正确的吗
如果是这样,在调用函数之前执行所有代码的最佳方法是什么
我试图解决的问题是,我希望mani-menu.js中的代码都在一个模块中。但是,我不能调用该模块中的任何方法,直到其中创建该模块的全局代码被执行
我可以在其中调用一个全局方法,然后创建所有内容,但这需要在每个.js文件中使用一个全局init()方法(每个文件都有一个唯一的名称)
处理这一切的最好办法是什么
更新:这里有一个更基本的问题(可能)。在编写javascript时(我使用senchaextjs和TypeScript),我需要创建我的对象。所以当我去创建比如说我的主菜单时,我想调用main-menu.js文件中的一个方法来获取我创建的ExtJS派生菜单对象
我认为main-menu.js中的所有代码都应该在一个名称空间中,包括我调用的获取菜单对象的方法。对吗?此外,大多数Ext JS代码的设置方式是,您有几个Ext.define()调用以及其他变量实例化,然后函数将获取所有这些,构建完整菜单并返回它。但这需要在调用main-menu.js之前在main-menu.js中执行所有代码
我的做法正确吗?到目前为止,我的经验是Java&C,我可能试图将该模型与javascript错误地匹配。让我们假设
菜单/main menu.js
包含以下内容:
define(function () {
// Module factory function
return [... whatever you want to expose...];
});
您的应用程序执行以下操作:
require(["menu/main-menu"], function (util) {
// Require callback.
});
发生的情况是:
require
调用加载menu/main menu.js
菜单/main menu.js
中的定义
定义的功能)
util
设置为
menu/main menu.js
中的工厂函数返回了什么define(function () {
return {
foo: function () {},
bar: function () {},
[...]
};
});
require(["menu/main-menu"], function (util) {
util.foo();
util.bar();
});
这将导出一个包含两个函数的对象。然后你可以使用它
像这样:
define(function () {
return {
foo: function () {},
bar: function () {},
[...]
};
});
require(["menu/main-menu"], function (util) {
util.foo();
util.bar();
});
RequireJS还支持定义模块的通用JS风格:
define(function (require, exports, module) {
exports.foo = function () {};
exports.bar = function () {};
[...]
});
这在功能上等同于我定义模块的第一种方式
前面:您得到了相同的两个函数,并且在相同的环境中使用它们
就像我上面所说的那样
不幸的是,我不能具体谈论ExtJS,因为我没有
使用它。我认为是这个定义让它起作用。只需一个require,即可加载.js文件,但可能尚未执行。如果您设计的应用程序旨在使用RequireJS,则必须使用
define
。可以让RequireJS处理不使用define
的文件,但只有在使用不适用于RequireJS的第三方库时才可以这样做。