Reputation: 568
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
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
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