dojo 如何调用“define”匿名方法中的JavaScript函数

kuhbmx9i  于 2022-12-08  发布在  Dojo
关注(0)|答案(3)|浏览(236)

如何调用一个在匿名函数中定义的函数,但这两个函数都在同一个JS文件中。下面是我的代码片段。如何从testMethodOutside()调用_testMethodInside()

// Line 1 to 13 is an existing code from ESRI API
    define([
        "dojo/_base/declare",
        "dojo/_base/html"
    ], function (
        declare,
        html
    ) {
        return declare([_WidgetBase, _TemplatedMixin], {
            _testMethodInside: function () {
                return 'success';
            }
        });
    });

//Call above using this function
    function testMethodOutside(){
        //How to call _testMethodInside() function from here
    }
xu3bshqb

xu3bshqb1#

遵循Dojo文档。define块定义了一个模块。您没有指定模块id(它将显式传递或从文件名推断),因此我将假定模块名为my/Example

require(['my/Example'], function(Example) {
   var example = new Example();
   example._testMethodInside(); // here is where you call _testMethodInside
}

关键的一点是,由于模块是异步加载的,因此可以安全调用它的唯一位置是传入(AMD) require的回调函数。

cx6n0qe3

cx6n0qe32#

使用esri的Web应用程序构建器,您通常可以:
1)将所有代码放在define/require中2)将其分成两个模块
这正是流程设计的初衷,例如:
文件1.js:

define([
    "dojo/_base/declare",
    "dojo/_base/html"
], function (
    declare,
    html
) {
    return declare([_WidgetBase, _TemplatedMixin], {
        _testMethodInside: function () {
            return 'success';
        }
    });
});

文件2.js:

require([
        './file1'
  ], function (File1) {

      File1._testMethodInside();
  })

此外,以下划线开头的方法名称是指定私有方法的常见设计选择,因此_testMethodInside实际上应该只由file 1调用

qhhrdooz

qhhrdooz3#

如果它应该只是_testMethodInside方法和testMethodOutside函数的公共函数,请考虑以下情况:

function sharedFunction() {
    return 'success';
}

function testMethodOutside() {
    sharedFunction();
}

define([
    "dojo/_base/declare",
    "dojo/_base/html"
], function (declare, html) {
    return declare([_WidgetBase, _TemplatedMixin], {
        _testMethodInside: sharedFunction
    });
});

相关问题