Select to view content in your preferred language

Access a config file from another widget

1813
12
Jump to solution
03-10-2017 03:11 PM
LefterisKoumis
Regular Contributor II

I have a situation that widget A needs to access the config file of widget B. Widget A already has its own config file. I need to compare a field between the two configs from widget A js file. Possible? Thanks.

0 Kudos
1 Solution

Accepted Solutions
RobertScheitlin__GISP
MVP Emeritus

You can get it from the appConfig like this (this is the best way if the widget has yet to be loaded):

this.appConfig.widgetOnScreen.widgets[8].config

View solution in original post

12 Replies
RobertScheitlin__GISP
MVP Emeritus

Lefteris,

  Inside a widget you can use this.appConfig to get the main config.json. Or you can use widgetmanager to getthe the other widget object and use the widget object like widgetB.config.

0 Kudos
LefterisKoumis
Regular Contributor II

Thank you. I haven't used the widget manager for a while and forgot about it.

0 Kudos
RobertScheitlin__GISP
MVP Emeritus

You can get it from the appConfig like this (this is the best way if the widget has yet to be loaded):

this.appConfig.widgetOnScreen.widgets[8].config
LefterisKoumis
Regular Contributor II

Similar to this question, to access, for an example, a function from another module, can I use this setup without using the widgetmanager?  If I can, do I call the function correctly? Thanks.

Module A:

define(["dojo/_base/declare",
       -------
        --------
        "./ModuleB",
          --------
          ---------
          ],
    function (declare,
       ------
        ------
        ModuleB,
        -------
        -------
     ){       
        return declare([BaseWidget, _WidgetsInTemplateMixin], {
            -------
               -------
        startup: function () {               
            -------
               -------
            ModuleB.loadSavedSessionsFromFile();
            --------
               --------
        },
          ------
0 Kudos
RobertScheitlin__GISP
MVP Emeritus

Lefteris,

   What you have above is not using WidgetManager at all..? If you use widget manager then you can get a reference to the actual widget object and then call a function inside that widget. There are many threads on using WidgetManager to get a widget object back.

0 Kudos
LefterisKoumis
Regular Contributor II

I need to revise my question. I am trying to reach a function that is in another js file (not part of a widget). I'd like to have an external js where a large number of functions will be hosted and any function can be easily called by the js of the widget.

As the script shows, one widget accessing a local js. Sorry, I was not clear. 

define(["dojo/_base/declare",
       -------
        --------
        "./localjs",
          --------
          ---------
          ],
    function (declare,
       ------
        ------
        localjs,
        -------
        -------
     ){       
        return declare([BaseWidget, _WidgetsInTemplateMixin], {
            -------
               -------
        startup: function () {               
            -------
               -------
            localjs.loadSavedSessionsFromFile();
            --------
               --------
        },
          ------
0 Kudos
RobertScheitlin__GISP
MVP Emeritus

Lefteris,

   I don't see anything wrong with that pattern of coding if the local.js is coded as a module.

define(['dojo/_base/declare',
  'dojo/Evented',
  'dojo/on',
  'dojo/_base/lang',
  'dojo/_base/html',
  'esri/request',
  'esri/tasks/query',
  'esri/tasks/QueryTask',
  'esri/tasks/FeatureSet',
  'dojo/keys',
  'dojo/date/locale'
],
  function (declare, Evented, on, lang, html, esriRequest, Query, QueryTask, FeatureSet, keys, locale) {
    return declare([Evented], {
      ....
0 Kudos
LefterisKoumis
Regular Contributor II

Somehow it does not work...It should be simple enough.

Widget A

define(['dojo/_base/declare', './test', 'jimu/BaseWidget'],
function(declare, test, BaseWidget) {
  //To create a widget, you need to derive from BaseWidget.
  return declare([BaseWidget], {
    // DemoWidget code goes here

    //please note that this property is be set by the framework when widget is loaded.
    //templateString: template,

    baseClass: 'jimu-widget-demo',

    postCreate: function() {
      this.inherited(arguments);
      console.log('postCreate');
    },

    startup: function() {
      this.inherited(arguments);
      this.mapIdNode.innerHTML = 'map id:' + this.map.id;
      test.myfunction();
      //myfunction();
    },

   
  });
});

test.js

define(['dojo/_base/declare',
  'dojo/Evented',
  'dojo/on',
  'dojo/_base/lang',
  'dojo/_base/html',
  'esri/request',
  'esri/tasks/query',
  'esri/tasks/QueryTask',
  'esri/tasks/FeatureSet',
  'dojo/keys',
  'dojo/date/locale'
],
  function (declare, Evented, on, lang, html, esriRequest, Query, QueryTask, FeatureSet, keys, locale) {
    return declare([Evented], {
    // DemoWidget code goes here

    //please note that this property is be set by the framework when widget is loaded.
    //templateString: template,
   myfunction: function(){

    alert("Can you see me now?")
   }
  });
});
0 Kudos
RobertScheitlin__GISP
MVP Emeritus

Lefteris,

   you need to us the new keyword:

var x = new test();
x.myfunction();
0 Kudos