Javascript 模块在require列表中的用途是什么,而在回调函数中的用途是什么

Javascript 模块在require列表中的用途是什么,而在回调函数中的用途是什么,javascript,jquery,dojo,Javascript,Jquery,Dojo,我基本上有两个问题。 一, <script type="text/javascript"> require( [ "dijit/registry", "dojo/ready", "awl/database/BaseEdit", "dojo/_base/connect", "awl/admin/Subscriptions", "abc/component/database/X

我基本上有两个问题。 一,

    <script type="text/javascript">
require(
    [
        "dijit/registry",
        "dojo/ready",
        "awl/database/BaseEdit",
        "dojo/_base/connect",
        "awl/admin/Subscriptions",
        "abc/component/database/XYZSettings"
    ],
    function(registry, ready, BaseEdit, connect, Subscriptions){
        ready(function(){
            BaseEdit({
                objId: "Settings",
                readUrl:'/ui/settings/',
                updateUrl:'/ui/settings/' ,
                defaultsUrl:'/ui/settings',
                creatable:false,
                deletable:false

            });
        });
     }
);
</script>
  • 下面的代码段中的“abc/component/database/XYZSettings”有什么用途。它没有在回调函数中使用

  •     <script type="text/javascript">
    require(
        [
            "dijit/registry",
            "dojo/ready",
            "awl/database/BaseEdit",
            "dojo/_base/connect",
            "awl/admin/Subscriptions",
            "abc/component/database/XYZSettings"
        ],
        function(registry, ready, BaseEdit, connect, Subscriptions){
            ready(function(){
                BaseEdit({
                    objId: "Settings",
                    readUrl:'/ui/settings/',
                    updateUrl:'/ui/settings/' ,
                    defaultsUrl:'/ui/settings',
                    creatable:false,
                    deletable:false
    
                });
            });
         }
    );
    </script>
    
  • 就绪功能后发生的情况。使用基本编辑

        <script type="text/javascript">
    require(
        [
            "dijit/registry",
            "dojo/ready",
            "awl/database/BaseEdit",
            "dojo/_base/connect",
            "awl/admin/Subscriptions",
            "abc/component/database/XYZSettings"
        ],
        function(registry, ready, BaseEdit, connect, Subscriptions){
            ready(function(){
                BaseEdit({
                    objId: "Settings",
                    readUrl:'/ui/settings/',
                    updateUrl:'/ui/settings/' ,
                    defaultsUrl:'/ui/settings',
                    creatable:false,
                    deletable:false
    
                });
            });
         }
    );
    </script>
    
    
    要求(
    [
    “dijit/注册表”,
    “dojo/ready”,
    “awl/数据库/基本编辑”,
    “dojo/_base/connect”,
    “awl/admin/Subscriptions”,
    “abc/组件/数据库/XYZ设置”
    ],
    功能(注册表、就绪、基本编辑、连接、订阅){
    就绪(函数(){
    基本编辑({
    目标:“设置”,
    readUrl:“/ui/settings/”,
    updateUrl:“/ui/settings/”,
    defaultsUrl:“/ui/settings”,
    可创建:错误,
    可删除:false
    });
    });
    }
    );
    

  • 关于第一个问题,有些模块在加载时会产生副作用,不需要直接引用其返回值。Dojo本身中的一些例子包括:

        <script type="text/javascript">
    require(
        [
            "dijit/registry",
            "dojo/ready",
            "awl/database/BaseEdit",
            "dojo/_base/connect",
            "awl/admin/Subscriptions",
            "abc/component/database/XYZSettings"
        ],
        function(registry, ready, BaseEdit, connect, Subscriptions){
            ready(function(){
                BaseEdit({
                    objId: "Settings",
                    readUrl:'/ui/settings/',
                    updateUrl:'/ui/settings/' ,
                    defaultsUrl:'/ui/settings',
                    creatable:false,
                    deletable:false
    
                });
            });
         }
    );
    </script>
    
    • dojo/domReady插件,它没有有意义的返回值,但在DOM准备就绪之前不会解析,因此会延迟回调中的任何内容运行到该点
    • 各种
      dojo/NodeList-*
      模块,向所有
      dojo/NodeList
      实例添加功能(例如,通过
      dojo/query
      调用返回)
    • dojo/query
      ,用于事件委派支持(包括使用
      dojo/on
      ,但不需要直接调用
      dojo/query
    关于问题2,
    dojo/ready
    在调用传递给它的回调之前,将等待所有挂起的模块被加载并且DOM准备就绪。通常不鼓励使用
    dojo/domReady
    需要

        <script type="text/javascript">
    require(
        [
            "dijit/registry",
            "dojo/ready",
            "awl/database/BaseEdit",
            "dojo/_base/connect",
            "awl/admin/Subscriptions",
            "abc/component/database/XYZSettings"
        ],
        function(registry, ready, BaseEdit, connect, Subscriptions){
            ready(function(){
                BaseEdit({
                    objId: "Settings",
                    readUrl:'/ui/settings/',
                    updateUrl:'/ui/settings/' ,
                    defaultsUrl:'/ui/settings',
                    creatable:false,
                    deletable:false
    
                });
            });
         }
    );
    </script>
    

    至于这里关于特定模块的问题,任何人都不可能在不知道这些模块实际是什么的情况下说出来,我假设它们是您项目中的专有代码。

    在使用声明性标记时,
    dojo/ready
    不是常用的吗?这也是模块可能已加载但未在回调中使用的原因之一。。。因为它只用于声明性标记。@Ken Franqueiro他们在这里创建BaseEdit的实例吗?它正在被调用,但它是否创建实例将取决于什么是
    BaseEdit
    ,我无法从这里有限的代码中分辨出来。如果它是使用
    dojo/\u base/declare
    创建的构造函数,那么是的,因为
    declare
    确保构造函数无论是否使用
    new
    关键字调用都能正常工作(但仍然鼓励使用
    new
    )。无论哪种方式,都不会保留对
    BaseEdit
    返回的任何内容的引用,因此我认为这是一种具有副作用的内容,这通常不适合构造函数。
        <script type="text/javascript">
    require(
        [
            "dijit/registry",
            "dojo/ready",
            "awl/database/BaseEdit",
            "dojo/_base/connect",
            "awl/admin/Subscriptions",
            "abc/component/database/XYZSettings"
        ],
        function(registry, ready, BaseEdit, connect, Subscriptions){
            ready(function(){
                BaseEdit({
                    objId: "Settings",
                    readUrl:'/ui/settings/',
                    updateUrl:'/ui/settings/' ,
                    defaultsUrl:'/ui/settings',
                    creatable:false,
                    deletable:false
    
                });
            });
         }
    );
    </script>