我已经阅读了文档:
https://dojotoolkit.org/reference-guide/1.10/dojo/domReady.html
还有一个相关的问题:
Dojo timing issue with dijit/registry and dojo/domReady
我仍然不确定正确的做法。 和其他用户一样,我有一个(很长的)单页Web应用程序,有几个视图。
我的所有js都需要dojo/domReady!
,但它不足以保证dijit/registry
在加载时的正确行为。
这是我的配置:
script(type="text/javascript").
dojoConfig = {
has: {
"dojo-firebug": false,
"dojo-debug-messages": false,
isDebug: false
},
parseOnLoad: false,
mblHideAddressBar: true,
async: true
};
script(src="/javascripts/dojo/dojo.js")
script(type="text/javascript").
require([
"dojox/mobile/parser",
"dojox/mobile/View",
"dojox/mobile/Button",
"dojox/mobile/TextBox",
"dojox/mobile/RoundRect",
"dojox/mobile/FilteredListMixin",
"dojox/mobile/TextArea",
"dojox/mobile/Switch",
"dojox/mobile/FormLayout",
"dojox/mobile/SimpleDialog",
"dojo/domReady!"
], function (parser) {
parser.parse();
});
然后,对于每个视图,我都有一个像这个模板的js函数:
#viewLogin(data-dojo-type="dojox/mobile/View" data-dojo-props="selected:true")
...
script(type="text/javascript").
require([
"dojo/dom",
"dojo/on",
"dojo/request/xhr",
"dojo/dom-form",
"dojo/_base/window",
"dijit/registry",
"dojox/mobile/parser",
"dojox/mobile/View",
"dojox/mobile/compat",
"dojox/mobile/Button",
"dojox/mobile/TextBox",
"dojox/mobile/RoundRect",
"dojox/mobile/FormLayout",
"dojox/mobile/SimpleDialog",
"dojo/domReady!"
], function (dom, on, xhr, domForm, win, registry) {
var txt = registry.byId("txtName").set("value", userName);
...
它足以包含每个js脚本中的ready(function(){ });
所有代码吗?
实际上这个问题可能会分成两部分:
答案 0 :(得分:1)
dojo/ready doc暗示dojo / domReady是可以忍受的。这两个都处理DOM准备就绪,这意味着加载了AMD资源并且浏览器已经准备好了初始DOM。在domReady之后,解析DOM,创建小部件和运行代码是下一步。
您发布的两个示例仅由dojo / domReady保护,因此视图代码可以在解析器仍在扫描DOM并创建窗口小部件实例之前(或同时)运行。您需要一些其他方式告诉应用程序已准备就绪,或在您尝试将数据加载到窗口小部件时进行更改。
dojo/Parser。parse返回一个promise,因此您可以使用它来了解解析何时完成(请参阅文档以获取警告),从而创建窗口小部件。然后,您可以启动视图,也可以发布topic以让其他对象知道事情已准备就绪。
您获取userName的请求可以在小部件的startup
方法中完成。虽然这会将您的小部件与不合适的数据相结合。其他一些对象可能负责获取该数据以及创建和启动视图。