Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where should I define global functions in ExtJS 4 MVC?

I need to define some functions which i can call everywhere in my app. What is the best approach to achieve this?

like image 473
Julian Hollmann Avatar asked Feb 13 '12 13:02

Julian Hollmann


2 Answers

Personally, to keep it as EXT-MVC as possible, I have a Utilities class full of static methods. This can be required like any other class to maintain proper dependency relations. This also ensures that the methods are run in an EXT environment, so all of EXT is available.

Ext.define('MyApp.Utilities', {
    statics: {
        foo: function (a, b) {
            return a + b;
        }
    }
});

Ext.define('MyApp.MyView', {
    extends: 'Ext.panel.Panel',
    requires: ['MyApp.Utilities'],

    initComponent: function () {
        MyApp.Utilities.foo(1, 2);
    }
});
like image 148
David Kanarek Avatar answered Dec 03 '22 09:12

David Kanarek


An alternative way other than @David Kanarek's statics approach is to define a singleton. Codes:

Ext.define('MyApp.Utilities2', {
    singleton: true,
    global_var2: 'Hello World',
    foo2: function (a, b) {
        return a + b;
    },
});

I've created a fiddle here: https://fiddle.sencha.com/#fiddle/qu1

The difference between the statics and singleton approach is that

  • MyApp.Utilities2 (singleton approach) is an object,
  • MyApp.Utilities (statics approach) is a class.

So It's up to you whether to reference the class itself or to reference one instance of that class for convenience.

like image 27
gm2008 Avatar answered Dec 03 '22 09:12

gm2008