Как вызвать функцию JavaScript, которая находится внутри «define» - анонимного метода - PullRequest
0 голосов
/ 30 ноября 2018

Как вызвать функцию, которая определена внутри анонимной функции, но обе в одном и том же файле JS.Вот мой фрагмент кода.Как позвонить _testMethodInside() из testMethodOutside()?

// 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
    }

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

С помощью конструктора веб-приложений esri вы обычно можете:

1) поместить весь свой код в определение / требовать 2) разделить его на два модуля

Так устроен дизайнпоток должен идти, например:

file1.js:

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

file2.js:

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

      File1._testMethodInside();
  })

Кроме того, имена методов начинаются с подчеркиванияэто общий выбор дизайна для обозначения приватных методов, поэтому _testMethodInside должен действительно вызываться только file1

0 голосов
/ 09 декабря 2018

Если это должна быть просто общая функция для метода _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
    });
});
0 голосов
/ 04 декабря 2018

Следуйте документации Dojo .Блок define определяет модуль.Вы не указали идентификатор модуля (который будет передан явно или выведен из имени файла), поэтому я буду действовать так, как если бы модуль имел имя my/Example.

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

Ключевым моментом является то, что поскольку модуль загружается асинхронно, единственное место, из которого вы можете безопасно вызвать его, - это функция обратного вызова, которую вы передаете в (AMD) require.

...