2013-04-18 49 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

感謝