1

我正在构建一个 sencha touch 应用程序,其中我在 app 文件夹之外定义了一个类,如何动态加载该类。

应用程序结构如下所示:

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

分配API:

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

              statics: {

                    getAssignments: function() {

                    }
              }
});

负载分配:

 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()
                    }
             }  

});

应用程序.js

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

注意*:如果我在 LoadAssignment 类的 requires:[] 中指定 Task.controller.AssignmentAPI 类,那么它可以正常工作,但是使用 Ext.require() 加载 Assignment.controller.AssignmentAPI 不起作用。

4

2 回答 2

2

Ext.require() 是异步的,因此当它到达您的 Ext.ClassManager.get() 行时,还没有包含该类。

您可以使用syncRequire() - 但在类定义中使用“requires”是一种更好的做法。

于 2013-09-20T15:47:20.993 回答
0

Ext.require结果可能是异步的。您需要在回调中继续您的逻辑:

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!
于 2013-09-20T15:44:44.163 回答