2012-04-25 27 views
11

MVC模式之前,我將包括UX類簡單地通過包括這個在JS的頂部,Ext.onReady前:如何在MVC模式中包含UX類?

Ext.Loader.setConfig({enabled: true}); 
Ext.Loader.setPath('Ext.ux', 'extjs/examples/ux'); 
Ext.require([ 
    'Ext.ux.grid.FiltersFeature' 
]); 

現在我對MVC模式工作,我有一個需要使用這個的GridPanel相同的功能。我已經包含了需要聲明的是這樣的觀點:

Ext.define('ST.view.StudentLog', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.studentlog', 
    requires: [ 
     'Ext.ux.grid.FiltersFeature' 
    ], 

,但應用程序產生一個404錯誤時,第一次啓動與此加載。

任何想法?

編輯:

我試圖把這個相同的代碼塊在視圖的頂部也無濟於事(指Ext.Loader.setConfig/.setPath塊)。

無論我怎麼試着告訴它,加載器一直試圖從extjs/src/ux/加載UX類。據this suggestion,我也嘗試在我的應用程序控制器中定義一個路徑屬性,但似乎無論回答者在源代碼中看到了什麼,然後在4.1 rc3中都不存在,因爲我無法找到它,並且它不起作用。

如果我只是在我的HTML中添加FilterFeature.js作爲導入的源文件和<script>標記,那麼當我的應用程序啓動時,它的所有依賴項都會收到404錯誤。

必須有一種簡單的方式將UX類直接包含在UX文件夾中,以便可以鏈接到其他UX依賴項。

+0

由於這是第一次進入時,我用Google搜索了上述問題,但解決這個如下的最新煎茶建築師的方式,我想與大家分享的鏈接:[如何在Extjs4和SA中加載外部類](http://stackoverflow.com/questions/10519681/how-to-add-ext-require-in-sencha-architect-2) – 2012-09-03 05:59:22

回答

14

好的我從this post找到它。

只需要在應用程序控制器的頂部使用Ext.Loader.setPath調用,如:

Ext.Loader.setPath('Ext.ux', 'extjs/examples/ux'); 
Ext.application({ 
    name: 'ST', 
    autoCreateViewport: true, 
    ... 

或任何你想放的UX類,用於冷凝的目的,應用特定的UX類應拉出並貼在您自己的文件夾,如app/ux作爲帖子封面。

+0

很高興你發現了一個修復程序。 – 2012-04-25 19:21:46

+0

只要記得在每次升級到更新版本的ExtJS後升級它們。 – HDave 2012-12-05 18:32:17

1

這聽起來像Ext.ux.grid.FiltersFeature文件所在的路徑的問題。您能檢查導致404的請求的URL是什麼嗎?這應該給你一個線索,以便將Ext.ux.grid.FiltersFeature的位置自動加載。

這裏是我使用的目錄結構和ux類的例子。

js 
|---app.js 
| 
|---app 
| |---controller 
| |---model 
| |---store 
| +---view 
| 
+---ux 
    |---form 
    +---layout 

基本上,命名空間將遵循目錄結構。

+0

加載程序正在查找UX類ExtJS的/ src目錄/ UX。但我不一定要將所有的ux類移動到src文件夾中。沒有可以將命名空間字符串映射到路徑字符串的地方嗎?像'Ext.ux = app/ux'。另請參閱有關進一步嘗試的編輯。 – Geronimo 2012-04-25 06:51:50

3

您可以將Loader參數組合在一起,使得閱讀和理解應用程序/文件結構變得非常簡單。我相信發生了什麼是你錯過了庫文件和應用程序文件的定義 - 所有都與app.js有關。因此,當您加載時,應用程序正嘗試使用基於主名稱空間路徑(extjs/src)而非應用程序根目錄的文件。

Ext.Loader.setConfig({ 
    enabled : true, 
    paths: { 
     'Ext' : 'extjs/src', // library src folder/files 
     'MyApp' : 'app',  // app namespace folder/files 
     'Ext.ux' : 'ux'   // extension namespace folder/files 
    } 
}); 

同樣的過程也適用於觸摸 - 只是交換「觸摸」的「extjs」。

如果使用Architect,您需要選擇Application,添加一個Loader(配置面板)。這將爲裝載程序提供可修改的路徑對象。 啓用選項是一個複選框選項,默認爲true。

編輯: 我沒有說清楚的是,在大多數情況下,庫源代碼和應用程​​序文件不需要定義,尤其是使用默認的文件佈局。這下面的代碼片段往往是充足的:

Ext.Loader.setConfig({ 
    enabled : true, 
    paths: { 
     'Ext.ux' : 'ux' 
    } 
}); 
+0

這簡化了一切,謝謝。 – Geronimo 2013-07-18 20:20:47

0

在我的情況(使用ux/DataTip.js),與EXT-4.2.1.883和煎茶CMD 4.0.2.67,我能夠使用Ext.ux類與所提供的解決方案,使用:

Ext.Loader.setPath('Ext.ux', 'extjs/examples/ux'); 

sencha app refresh抱怨,有:

[ERR] C2008:要求沒有匹配的文件(Ext.ux.DataTip)

應對/連接extjs/examples/uxextjs/src/ux解決我的問題。該應用程序的作品和sencha cmd也能夠跟蹤事情。通過該複製/鏈接操作,不需要使用Ext.Loader.setPath。只要在需要的類中使用:

Ext.define('Demo.Application', { 
name : 'Demo', 
requires : [ (...), 'Ext.ux.DataTip'], 
3

第6種,使用MVVC和sencha cmd。我使用sencha生成應用程序來啓動應用程序。 我編寫的地方,我想用ItemSelector點,修改了app.json要求在ux加了塊:

"requires": [ 
    "font-awesome", 
    "ux" 
], 

在我的控制器代碼,我想創建ItemSelector部件:

requires: [ 
    'Ext.ux.form.MultiSelect', 
    'Ext.ux.form.ItemSelector' 
], 

和適當的代碼來創建ItemSelector。我遇到的一個問題是,它需要一個真正的數據存儲與模型,我不能使用模擬數據。

然後我做了一個應用程序的煎茶建立

+0

謝謝,它運作良好! – wondie 2017-05-28 08:57:59