2013-04-18 47 views
1

我有一个从主html文件加载的app.js文件。现在这个app.js文件点击其中定义的链接,使用Ext.require()动态加载第二个js文件。加载发生好,因为我已经定义了Ext.Loader.setPath()等,第二个脚本包含诸如Ext.require()之类的行来导入一些ui库,然后是onReady(),我的问题是onReady永远不会被触发,而我无法将外观渲染代码放置在onReady()之外。 onReady是否仅用于同步加载脚本?EXTJS - 内部脚本的Ext.require和onReady()

非常感谢

回答

3

onReady只会为您的应用程序启动一次。

如果你看看你会看到Ext.require(该文档)可以采取一个回调函数:

Ext.require('My.foo.Bar', function() { 
    console.log('do something'); 
}); 

http://docs.sencha.com/extjs/4.2.0/#!/api/Ext-method-require

+0

感谢,没有工作!在此之前,我依靠jQuery的getScript() – 2013-04-18 07:31:43

+1

上面的代码在Chrome和Mozilla上运行良好,但在IE中我得到“网页错误详情 消息:'processed'为空或不是对象 Line:101634 Char:13 Code :0 URI:ext-all-debug.js “ – 2013-04-18 07:39:57

1

由于埃文说,Ext.onReady将仅针对负载第一次浏览HTML页面。

如果您使用的是ExtJS 4,那么从app.js加载脚本通常会落入MVC模式。

这实际上意味着你的控制器是从app.js初始化的,然后这些控制器负责处理你通常放在onReady()中的代码,以将函数绑定到事件。 'views'的概念就是你放置widget代码的地方。

E.g.

app.js

Ext.application({ 
name: 'MyApp', 
appFolder: '/MyApp/Scripts', 
autoCreateViewport: true, 
requires: [ 
    //data 
    'ALES.controller.MyController', 
] 
}); 

MyController.js

Ext.define('ALES.controller.MyController', { 
extend: 'Ext.app.Controller', 

id: 'MyController', 
views: [ 
    'MyView' 
], 
stores: [ 
    'MyStore' 
], 
init: function() { 
    this.control(
     { 
      'panel > button': { click: this.myClickHandler } 
     }); 

}); 

MyView.js

Ext.define('MyApp.view.MyView', { 
extend: 'Ext.form.Panel', 

id: 'MyView', 

requires: [ 
    'Ext.grid.plugin.CellEditing' //or other Ext stuff you want to include 
], 

constructor: function (config) { 
    this.initConfig(config); 
    return this.callParent(arguments); 
}, 

initComponent: function() { 

    Ext.apply(this, { 
     items: this.createControls() 
    }); 

    this.callParent(); 

}, 

createControls: function() { 
    return [{ 
     xtype: 'panel', 
     items: [{ 
      xtype: 'button'     
     }] 

    } 
    ]; 
} 
}); 

的一些体面的GUI DES在煎茶网站,我建议你进行更深层次的理解通读:

http://docs.sencha.com/extjs/4.1.3/#!/guide/application_architecture

+0

感谢mvc上的非常简单的例子,我非常接近这个,但也许我可以更好地做出这样的。 – 2013-04-18 07:34:19

1

Ext.onReady像的document.ready相似。

准备就绪(Ext.onReady)事件的目的是在文档加载后它应尽早发生,以便为页面中的元素添加funcionality的代码不必等待所有加载的内容(如图像,样式等)

关于“Ext.require()”。 require是Ext.Loader.require的别名,它声明它将通过()中的给定名称及其所有直接依赖项加载所有类;可选地在可选范围内执行给定的回调函数。简单地说,我们可以说实例加载类来启动渲染。

回答你的问题“onReady是否只适用于脚本的同步加载?”.... 是的,它会同步工作,直到它将所需的类加载到引擎。使用Ext的一个主要目的require()是首先加载require类,以使我们的组件快速呈现。

请参阅下面的链接以供参考

http://docs.sencha.com/extjs/4.2.0/#!/api/Ext http://docs.sencha.com/extjs/3.4.0/#!/api/Ext-method-onReady

感谢