как я могу получить переменную в функции скрипта? - PullRequest
1 голос
/ 14 мая 2019

Я хочу получить значение функции js. как я могу получить их?

Я использую HTML и Javascript и Alloy-UI

Я тестирую в консоли разработчика Chrome. staY.diagrambuilder или staY.Y или введите имя функции.

<script>
 var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
var diagrambuilder = new Y.DiagramBuilder({
            availableFields: availableFields,
            boundingBox: '#diagrambuilderBB',
            srcNode: '#diagrambuilderBB',
            fields: []
        });
console.log(diagrambuilder); //i want to access variable out of this script
});
</script>

как мне получить переменную diagrambuilder в консоли разработчика Chrome?

Ответы [ 2 ]

1 голос
/ 14 мая 2019
<script>
var diagrambuilder = null;
var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
diagrambuilder = new Y.DiagramBuilder({
            availableFields: availableFields,
            boundingBox: '#diagrambuilderBB',
            srcNode: '#diagrambuilderBB',
            fields: []
        });
console.log(diagrambuilder); //i want to access variable out of this script

diagramInitialized();

});

function diagramInitialized() {
    console.log('If you are seeing this thenm diagrambuilder is available in global scope'); //it is accessible now;
    console.log(diagrambuilder); //it is accessible now;
}
</script>

Это то, что вы хотите? @ User9041996

1 голос
/ 14 мая 2019

У вас есть доступ только к diagrambuilder внутри функции обратного вызова, которую вы передаете YUI.use.

<script>
  var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
      var diagrambuilder = new Y.DiagramBuilder({
        availableFields: availableFields,
        boundingBox: '#diagrambuilderBB',
        srcNode: '#diagrambuilderBB',
        fields: []
      });

      console.log(diagrambuilder);
      // use diagrambuilder here
    });
  );
</script>

Если вы не хотите помещать весь свой код в функцию YUI.use, вы можете создать свою собственную функцию, которая принимает diagrambuilder.

<script>
  var buildDiagram = function(diagrambuilder) {
    console.log(diagrambuilder);
    // use diagrambuilder here
  }

  var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
      var diagrambuilder = new Y.DiagramBuilder({
        availableFields: availableFields,
        boundingBox: '#diagrambuilderBB',
        srcNode: '#diagrambuilderBB',
        fields: []
      });

      buildDiagram(diagrambuilder);
    });
  );
</script>

Другой вариант, который у вас есть, - создать функцию, которая принимает Y:

<script>
  var buildDiagram = function(Y) {
    var diagrambuilder = new Y.DiagramBuilder({
      availableFields: availableFields,
      boundingBox: '#diagrambuilderBB',
      srcNode: '#diagrambuilderBB',
      fields: []
    });

    console.log(diagrambuilder);
    // use diagrambuilder here
  }

  var staY = YUI().use('aui-diagram-builder', buildDiagram);
</script>

Все они делают одно и то же, но место написания кода варьируется. В любом случае, дело в том, что у вас есть доступ только к Y.DiagramBuilder внутри функции обратного вызова YUI().use().

Вы не можете сделать что-то вроде этого:

<script>
  var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
      var diagrambuilder = new Y.DiagramBuilder({
        availableFields: availableFields,
        boundingBox: '#diagrambuilderBB',
        srcNode: '#diagrambuilderBB',
        fields: []
      });
    });
  );

  console.log(diagrambuilder); // undefined
</script>

А вы не можете сделать это:

<script>
  var diagrambuilder;

  var staY = YUI().use(
    'aui-diagram-builder',

    function (Y) {
     diagrambuilder = new Y.DiagramBuilder({
        availableFields: availableFields,
        boundingBox: '#diagrambuilderBB',
        srcNode: '#diagrambuilderBB',
        fields: []
      });
    });
  );

  // This will most likely be null, as it takes time to load
  // the aui-diagram-builder library, and the code is asynchronous.
  // If this does happen to work for you, know that you're getting lucky
  // and it will fail at some point. This is not something you should do,
  // but I think it's what you're hoping for, so I'm pointing it out.
  console.log(diagrambuilder);
</script>
...