Simply Innovative
Simply Innovative

Reputation: 568

Ext.require not working

I am building a sencha touch application in which I have a class defined outside of app folder, how to load that class dynamically.

Application Structure looks like below:

assets
   -> Assignment
          -> controller
                 -> AssignmentAPI
   -> Application
          -> app
                -> controller
                     -> LoadAssignment
          -> app.js

AssignmentAPI:

Ext.define('Assignment.controller.AssignmentAPI', {
          extend:'Ext.app.Controller',

              statics: {

                    getAssignments: function() {

                    }
              }
});

LoadAssignment:

 Ext.define('Application.controller.LoadAssignment', {
             extend:'Ext.app.Controller',


             requires: [
             ],

             statics: {
                    populateAssignments: function() {

                         Ext.require(['Product.controller.AssignmentAPI']);

             var assignmentAPI = Ext.ClassManager.get('Assignment.controller.AssignmentAPI');           
             //Assignment API is coming as NULL

             assignmentAPI.getAssignments()
                    }
             }  

});

app.js

 Ext.Loader.setPath({
       'Ext':      'sdk/src',
       'Assignment': '../Assignment'
  });

Note*: If I specify Task.controller.AssignmentAPI class in requires:[] of LoadAssignment class then it works fine, but loading Assignment.controller.AssignmentAPI using Ext.require() does not work.

Upvotes: 1

Views: 2282

Answers (2)

arthurakay
arthurakay

Reputation: 5651

Ext.require() is asynchronous, so the class hasn't been included by the time it hits your Ext.ClassManager.get() line.

You could use syncRequire() - but using "requires" on the class definition is a far better practice.

Upvotes: 2

rixo
rixo

Reputation: 25001

Ext.require result may be asynchronous. You need to continue your logic in a callback:

Ext.require(['Audit.controller.TaskAPI'], function() {

    // Here you can be sure that the required class is available

    var taskAPI = Ext.ClassManager.get('Task.controller.TaskAPI');         
    //Task API is coming as NULL

    tasksAPI.getTasks()
});

// ... While here, you can't!

Upvotes: 0

Related Questions