【问题标题】:dojo/domReady! and dojo/ready clarificationdojo/domReady!和道场/准备澄清
【发布时间】:2016-12-06 09:41:00
【问题描述】:

我已经阅读了文档:

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(){ });就够了吗?

其实这个问题可能一分为二:

  1. 可以吗?
  2. 这是推荐的方式吗?

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

    dojo/ready doc 意味着 dojo/domReady 是可取的。这两个都处理准备好的 DOM,这意味着加载 AMD 资源并且浏览器已经准备好初始 DOM。解析 DOM、创建小部件和运行代码是 domReady 之后的下一步。

    您发布的两个示例仅由 dojo/domReady 保护,因此视图代码可以在解析器仍在扫描 DOM 并创建小部件实例之前(或同时)运行。您需要其他方式来告诉应用程序一切准备就绪,或者在您尝试将数据加载到小部件时进行更改。

    dojo/Parser.parse 返回一个承诺,因此您可以使用它来了解解析何时完成(请参阅文档以获取警告),从而创建小部件。然后您可以启动视图,或发布topic 让其他对象知道一切准备就绪。

    您获取用户名的请求可以在小部件的startup 方法中完成。尽管这会将您的小部件与不好的数据结合起来。其他一些对象可能负责获取该数据并创建和启动视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2012-04-14
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多