dojo/domReady!和 dojo/ready 说明
dojo/domReady! and dojo/ready clarification
我已经阅读了文档:
https://dojotoolkit.org/reference-guide/1.10/dojo/domReady.html
还有一个相关问题:
我仍然不确定正确的方法。
与其他用户一样,我有一个(相当长的)具有多个视图的单页 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(){ });
就够了吗?
实际上这个问题可以分为两个:
- 可以吗?
- 这是推荐的方式吗?
dojo/ready doc 暗示 dojo/domReady 是可取的。这两个都处理 DOM 准备就绪,这意味着 AMD 资源已加载并且浏览器已准备好初始 DOM。解析 DOM、创建小部件和 运行 调整您的代码是 domReady 之后的下一步。
您发布的两个示例仅由 dojo/domReady 保护,因此视图代码可以 运行 在解析器仍在扫描 DOM 并创建小部件实例之前(或同时)。您需要一些其他方式来告诉应用程序一切准备就绪,或者在您尝试将数据加载到小部件时进行更改。
dojo/Parser.parse returns a promise, so you can use that to know when the parsing is complete (see the doc for a caveat) and thus the widgets are created. Then you can either launch the view, or publish a topic 让其他对象知道事情已经准备就绪。
您获取用户名的请求可以在小部件的 startup
方法中完成。尽管这会将您的小部件与数据耦合在一起,但这并不好。其他一些对象可能负责获取该数据以及创建和启动视图。
我已经阅读了文档:
https://dojotoolkit.org/reference-guide/1.10/dojo/domReady.html
还有一个相关问题:
我仍然不确定正确的方法。 与其他用户一样,我有一个(相当长的)具有多个视图的单页 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(){ });
就够了吗?
实际上这个问题可以分为两个:
- 可以吗?
- 这是推荐的方式吗?
dojo/ready doc 暗示 dojo/domReady 是可取的。这两个都处理 DOM 准备就绪,这意味着 AMD 资源已加载并且浏览器已准备好初始 DOM。解析 DOM、创建小部件和 运行 调整您的代码是 domReady 之后的下一步。
您发布的两个示例仅由 dojo/domReady 保护,因此视图代码可以 运行 在解析器仍在扫描 DOM 并创建小部件实例之前(或同时)。您需要一些其他方式来告诉应用程序一切准备就绪,或者在您尝试将数据加载到小部件时进行更改。
dojo/Parser.parse returns a promise, so you can use that to know when the parsing is complete (see the doc for a caveat) and thus the widgets are created. Then you can either launch the view, or publish a topic 让其他对象知道事情已经准备就绪。
您获取用户名的请求可以在小部件的 startup
方法中完成。尽管这会将您的小部件与数据耦合在一起,但这并不好。其他一些对象可能负责获取该数据以及创建和启动视图。