我正在编写一个框架,允许您的模块在提供页面之前定义哪些 JS 文件将被添加到页面中。这个想法是一个模块可能会添加这样的东西:
require([ 'dojo/topic', 'dojo/_base/window', 'hotplate/hotDojoWidgets/AlertBar' ], function( topic, win, AlertBar
){
globalAlertBar = new AlertBar( { background: '#FF4444' } );
globalAlertBar.placeAt( document.body, 'first' );
globalAlertBar.startup();
topic.subscribe('globalAlert', function( message, displayFor ){
displayFor = displayFor || 2500;
globalAlertBar.set( 'message', message );
globalAlertBar.show( displayFor );
});
});
例如,这允许我允许应用程序周围的其他小部件发布globalAlert
以显示 alertBar。马上:
- 添加到要加载的 JS 列表中的任何 JS/Dojo 文件都以“require”开头。对我来说,这只是加载后会在某个时间点运行的异步代码。在框架中以这种方式加载的大部分代码都会等待主题发布,并会采取相应的行动
- “应用程序”将只是这些模块之一,它将订阅发布容器对象的主题
- 由 require() 加载的“正确的”Dojo 小部件显然会使用“定义”——这和往常一样,不用担心
问题:
1) 如果我ready()
在页面中引用的其中一个 JS/Dojo 文件中运行,那会是页面级的 ready(),包括文档中加载的所有 .js 文件吗?还是仅针对当前文件加载的文件?
2)我意识到“正确”的做事方式是只运行一个 JS 文件require()
,并从该文件加载其他所有文件(或者使用 data-dojo-main 更好)。但是,我正在尝试定义独立工作的模块(带有服务器和客户端代码)并将它们自己添加到页面中......那么,在应用程序页面中有一堆文件,然后拥有它们实际上是不好的做法require()
正在运行 Dojo 代码?
谢谢!
默克。
PS如果你好奇,https://github.com/mercmobily/hotplate ...项目在这里发帖后开始!