初探 Ext JS 6 (sencha touch/ext升級版)

Sencha Touch 如今已全面升級至Ext Js 6,那麼咱們如何使用他們呢?javascript

首先去官網下載最新的sdk和幫助文檔css

sdk下載地址:https://www.sencha.com/products/extjs/evaluate/html

如圖,這個是試用版下載地址,試用版和正版的區別大概就是試用版有試用標記水印吧,大概是吧。java

官方api下載地址:http://docs.sencha.com/extjs/6.0/正則表達式

這個就是官方的在線api了,想要下載就把鼠標移動到左上角的Ext JS Guides上面去,如圖json

選擇你想要下載的版本,點有括號的連接就能下載了。如圖bootstrap

若是不太瞭解api如何使用的同窗能夠參考如下文章:api

http://www.cnblogs.com/mlzs/p/3908739.html瀏覽器

對了,咱們還應該去下載一個最新的cmd,下載地址:緩存

https://www.sencha.com/products/extjs/cmd-download/

若是你是初學者,還不清楚如何配置環境這些,能夠參考如下文章,環境搭建部分:

http://www.cnblogs.com/mlzs/p/3420900.html

 

以上準備完成以後,咱們就來用用Ext Js 6吧

首先運行cmd命令行,輸入如下命令:

sencha -sdk D:\ASPX\ext-premium-6.0.1\ext-6.0.1 generate app app D:\ASPX\Test\www

如圖所示:

命令解釋,在D:\ASPX\Test\www 目錄下建立一個ext項目,命名空間是app

D:\ASPX\ext-premium-6.0.1\ext-6.0.1:你選擇的sdk根目錄

app D:\ASPX\Test\www:在指定目錄建立一個項目,命名空間爲app

 

ok,如今咱們來看看效果,用谷歌瀏覽器打開項目,如圖

 

咱們把谷歌瀏覽器切換到手機模式試試,如圖

這樣效果和咱們原來的sencha touch沒啥差異了

看看index.html的代碼

 1 <!DOCTYPE HTML>
 2 <html manifest="">
 3 <head>
 4     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 7 
 8     <title>app</title>
 9 
10     
11     <script type="text/javascript">
12         var Ext = Ext || {}; // Ext namespace won't be defined yet...
13 
14         // 在這裏檢測設備類型,根據類型決定調用那個模塊
15         // 除了ext自帶的現代版和經典版你還能夠自定義一些模塊
16         Ext.beforeLoad = function (tags) {
17             var s = location.search,  // the query string (ex "?foo=1&bar")
18                 profile;
19 
20             // For testing look for "?classic" or "?modern" in the URL to override
21             // device detection default.
22             //
23             if (s.match(/\bclassic\b/)) {
24                 profile = 'classic';
25             }
26             else if (s.match(/\bmodern\b/)) {
27                 profile = 'modern';
28             }
29             else {
30                 profile = tags.desktop ? 'classic' : 'modern';
31                 //profile = tags.phone ? 'modern' : 'classic';
32             }
33             //最後profile的值是啥,就調用那個模塊
34             Ext.manifest = profile; // this name must match a build profile name
35 
36             // This function is called once the manifest is available but before
37             // any data is pulled from it.
38             //
39             //return function (manifest) {
40                 // peek at / modify the manifest object
41             //};
42         };
43     </script>
44     
45     
46     <!-- The line below must be kept intact for Sencha Cmd to build your application -->
47     <script id="microloader" data-app="95540398-5be2-4a4a-9cab-b172e28eb380" type="text/javascript" src="bootstrap.js"></script>
48 
49 </head>
50 <body></body>
51 </html>

從註釋能夠看出,ext經過判斷設備類型來決定調用那個模塊來工做

隱藏掉一些無關目錄文件,咱們來看看項目結構,如圖:

app仍是那個app,resources仍是那個resources,sass呢也仍是那個sass

不過多了classic和modern還有overrides

在ext裏面,對於一些通用的東西咱們能夠放在app文件夾裏面好比model、store和部分控制層的東西

而後classic和modern分別對應之前的ext和sencha touch,他們的src就至關於之前的app文件了。

overrides是拿來放重寫類的文件夾

而後對於sencha touch來講ViewController和ViewModel是新東西,這個你們能夠看看http://blog.csdn.net/sushengmiyan/article/details/38612721

最主要的是app.json發生了一些變化,具體說明看註釋:

  1 {
  2     /**
  3      * 應用程序的命名空間。
  4      */
  5     "name": "app",
  6 
  7     /**
  8      * 應用程序的版本。
  9      */
 10     "version": "1.0.0.0",
 11 
 12     /**
 13      * 起始頁面名稱(後綴能夠是HTML,JSP,ASP等)。
 14      */
 15     "indexHtmlPath": "index.html",
 16 
 17     /**
 18      * 項目文件路徑,也就是默認的modern/src和classic/src
 19      */
 20     "classpath": [
 21         "app",
 22         "${toolkit.name}/src"
 23     ],
 24 
 25     /**
 26      * 重寫類文件目錄路徑,也就是默認的modern/overrides和classic/overrides
 27      */
 28     "overrides": [
 29         "overrides",
 30         "${toolkit.name}/overrides"
 31     ],
 32 
 33     /**
 34      * The Sencha Framework for this application: "ext" or "touch".
 35      * 不知道作啥用的,改爲touch以後沒法打包了
 36      */
 37     "framework": "ext",
 38 
 39     /**
 40      * 默認沒有這個配置,若是配置就能夠指定打包模式 "classic" or "modern".
 41      */
 42     "toolkit": "modern",
 43 
 44     /**
 45      * 默認沒有這個配置,應用的主題名稱,不要隨便亂寫
 46      */
 47     /**
 48     "theme": "ext-theme-crisp",
 49     */
 50     /**
 51      * 須要的擴展包 ( 默認是最新的).
 52      *
 53      * 例如,
 54      *
 55      *      "requires": [
 56      *          "charts"
 57      *      ]
 58      */
 59     "requires": [
 60         "font-awesome"
 61     ],
 62 
 63     /**
 64      * 打包相關配置
 65      */
 66     "fashion": {
 67         "inliner": {
 68             /**
 69              * 是否禁用資源的內聯。默認狀況下不啓用。
 70              * 不知道作啥的
 71              */
 72             "enable": false
 73         }
 74     },
 75 
 76     /**
 77      * Sass 相關配置.
 78      */
 79     "sass": {
 80         /**
 81          * 命名空間映射 
 82          */
 83         "namespace": "app",
 84 
 85         /**
 86          * File used to save sass variables edited via Sencha Inspector. This file
 87          * will automatically be applied to the end of the scss build.
 88          *
 89          *      "save": "sass/save.scss"
 90          *
 91          */
 92 
 93         /**
 94          * 默認全局scss樣式路徑
 95          *
 96          *      +-------+---------+
 97          *      |       | base    |
 98          *      | theme +---------+
 99          *      |       | derived |
100          *      +-------+---------+
101          *      | packages        |  (in package dependency order)
102          *      +-----------------+
103          *      | application     |
104          *      +-----------------+
105          */
106         "etc": [
107             "sass/etc/all.scss",
108             "${toolkit.name}/sass/etc/all.scss"
109         ],
110 
111         /**
112          * 默認全局scss 變量路徑
113          *
114          *      +-------+---------+
115          *      |       | base    |
116          *      | theme +---------+
117          *      |       | derived |
118          *      +-------+---------+
119          *      | packages        |  (in package dependency order)
120          *      +-----------------+
121          *      | application     |
122          *      +-----------------+
123          *
124          * The "sass/var/all.scss" file is always included at the start of the var
125          * block before any files associated with JavaScript classes.
126          */
127         "var": [
128             "sass/var/all.scss",
129             "sass/var",
130             "${toolkit.name}/sass/var"
131         ],
132 
133         /**
134          *  默認全局scss 目錄路徑
135          *      +-------+---------+
136          *      |       | base    |
137          *      | theme +---------+
138          *      |       | derived |
139          *      +-------+---------+
140          *      | packages        |  (in package dependency order)
141          *      +-----------------+
142          *      | application     |
143          *      +-----------------+
144          */
145         "src": [
146             "sass/src",
147             "${toolkit.name}/sass/src"
148         ]
149     },
150 
151     /**
152      * 所需引用js文件
153      * 單個格式以下
154      *
155      *      {
156      *          // 文件路徑,若是本地文件,路徑相對於此app.json文件
157      *          //
158      *          "path": "path/to/script.js",   // REQUIRED
159      *
160      *          // 設置爲true,表示全部的類生成到這個文件
161      *          //
162      *          "bundle": false,    // OPTIONAL
163      *
164      *          // 設置爲true以包括級聯的類文件。
165      *          // 不清楚含義
166      *          "includeInBundle": false,  // OPTIONAL
167      *
168      *          //設置爲true,表示這個文件是一個遠程文件不會被複制,默認false
169      *          "remote": false,    // OPTIONAL
170      *
171      *          // 若是沒有指定,這個文件將只加載一次,
172      *          // 緩存到localStorage裏面,直到這個值被改變。
173      *          //
174      *          //   - "delta" 增量更新此文件
175      *          //   - "full" 當文件改變時,徹底更新此文件
176      *          //
177      *          "update": "",        // OPTIONAL
178      *
179      *          // 設置爲true,表示這是項目依賴文件。
180      *          // 該文件不會被複制到生成目錄或引用
181      *          "bootstrap": false   // OPTIONAL
182      *      }
183      *
184      */
185     "js": [
186         {
187             "path": "app.js",
188             "bundle": true
189         }
190     ],
191 
192     /**
193      *  經典包所需引入的js
194      */
195     "classic": {
196         "js": [
197             // 刪除此項將單獨從框架加載源。
198             {
199                 "path": "${framework.dir}/build/ext-all-rtl-debug.js"
200             }
201         ]
202     },
203 
204     /**
205      * 現代包所需引入的js
206      */
207     "modern": {
208         "js": [
209             // 刪除此項將單獨從框架加載源。
210             {
211                 "path": "${framework.dir}/build/ext-modern-all-debug.js"
212             }
213         ]
214     },
215 
216     /**
217      * 所需引用css文件
218      * 單個格式以下
219      *      {
220      *          // 文件路徑,若是本地文件,路徑相對於此app.json文件
221      *          //
222      *          "path": "path/to/stylesheet.css",   // REQUIRED
223      *
224      *          //設置爲true,表示這個文件是一個遠程文件不會被複制,默認false
225      *          "remote": false,    // OPTIONAL
226      *
227      *          // 若是沒有指定,這個文件將只加載一次,
228      *          // 緩存到localStorage裏面,直到這個值被改變。
229      *          //
230      *          //   - "delta" 增量更新此文件
231      *          //   - "full" 當文件改變時,徹底更新此文件
232      *          //
233      *          "update": ""      // OPTIONAL
234      *      }
235      */
236     "css": [
237         {
238             // 輸出css路徑
239             // 默認.sencha/app/defaults.properties
240             "path": "${build.out.css.path}",
241             "bundle": true,
242             "exclude": [ "fashion" ]
243         }
244     ],
245 
246     /**
247      * 應用加載配置
248      *
249      */
250     "loader": {
251                 // 緩存配置
252         //
253         //   - true: 容許緩存 
254         //   - false: 禁用緩存
255         //   - other:不明白
256         //
257         "cache": false,
258 
259         // 緩存沒有啓用時傳遞的參數
260         "cacheParam": "_dc"
261     },
262 
263     /**
264      * 打包命令相關配置
265      */
266     "production": {
267         "output": {
268             "appCache": {
269                 "enable": true,
270                 "path": "cache.appcache"
271             }
272         },
273         "loader": {
274             "cache": "${build.timestamp}"
275         },
276         "cache": {
277             "enable": true
278         },
279         "compressor": {
280             "type": "yui"
281         }
282     },
283 
284     /**
285      * Settings specific to testing builds.
286      */
287     "testing": {
288     },
289 
290     /**
291      * Settings specific to development builds.
292      */
293     "development": {
294         "tags": [
295             // You can add this tag to enable Fashion when using app watch or
296             // you can add "?platformTags=fashion:1" to the URL to enable Fashion
297             // without changing this file.
298             //
299             // "fashion"
300         ]
301     },
302 
303     /**
304      * Controls the output structure of development-mode (bootstrap) artifacts. May
305      * be specified by a string:
306      *
307      *      "bootstrap": "${app.dir}"
308      *
309      * This will adjust the base path for all bootstrap objects, or expanded into object
310      * form:
311      *
312      *      "bootstrap": {
313      *          "base": "${app.dir},
314      *          "manifest": "bootstrap.json",
315      *          "microloader": "bootstrap.js",
316      *          "css": "bootstrap.css"
317      *      }
318      *
319      * You can optionally exclude entries from the manifest. For example, to exclude
320      * the "loadOrder" (to help development load approximate a build) you can add:
321      *
322      *      "bootstrap": {
323      *          "manifest": {
324      *              "path": "bootstrap.json",
325      *              "exclude": "loadOrder"
326      *          }
327      *      }
328      *
329      */
330     "bootstrap": {
331         "base": "${app.dir}",
332 
333         "manifest": "${build.id}.json",
334 
335         "microloader": "bootstrap.js",
336         "css": "bootstrap.css"
337     },
338 
339     /**
340      *  輸出配置,能夠是字符串
341      *      "${workspace.build.dir}/${build.environment}/${app.name}"
342      *
343      *  也能夠是一個對象
344      *
345      *      {
346      *          "base": "${workspace.build.dir}/${build.environment}/${app.name}",
347      *          "page": {
348      *              "path": "../index.html",
349      *              "enable": false
350      *          },
351      *          "css": "${app.output.resources}/${app.name}-all.css",
352      *          "js": "app.js",
353      *          "microloader": {
354      *              "path": "microloader.js",
355      *              "embed": true,
356      *              "enable": true
357      *          },
358      *          "manifest": {
359      *              "path": "app.json",
360      *              "embed": false,
361      *              "enable": "${app.output.microloader.enable}"
362      *          },
363      *          "resources": "resources",
364      *          "slicer": {
365      *              "path": "${app.output.resources}/images",
366      *              "enable": false
367      *          },
368      *          // 是否禁用緩存
369      *          "appCache":{
370      *              "enable": false"
371      *          }
372      *      }
373      *
374      */
375 
376     "output": {
377         "base": "${workspace.build.dir}/${build.environment}/${app.name}",
378         "page": "index.html",
379         "manifest": "${build.id}.json",
380         "js": "${build.id}/app.js",
381         "appCache": {
382             "enable": false
383         },
384         "resources": {
385             "path": "${build.id}/resources",
386             "shared": "resources"
387         }
388     },
389 
390 
391     /**
392     *  緩存配置
393     *   "cache": {
394     *       // 是否禁用緩存,爲true將全局禁用
395     *       "enable": false,
396     *
397     *       // 全局配置
398     *       // 設置爲deltas,或者true表示增量更新
399     *       // 不設置或者爲false將禁用
400     *       "deltas": "deltas"
401     *   }
402     */
403 
404     "cache": {
405         "enable": false,
406         "deltas": "${build.id}/deltas"
407     },
408 
409 
410     /**
411      * 自動生成的緩存文件配置
412      */
413     "appCache": {
414         /**
415          * 緩存目標
416          */
417         "cache": [
418             "index.html"
419         ],
420         /**
421          * 做用目錄
422          */
423         "network": [
424             "*"
425         ],
426         /**
427          * 非做用目錄?
428          */
429         "fallback": [ ]
430     },
431 
432     /**
433      * 項目生成時須要複製的資源文件
434      */
435     "resources": [
436         {
437             "path": "resources",
438             "output": "shared"
439         },
440         {
441             "path": "${toolkit.name}/resources"
442         },
443         {
444             "path": "${build.id}/resources"
445         }
446     ],
447 
448     /**
449      * 打包時忽略對象的正則表達式
450      */
451     "ignore": [
452         "(^|/)CVS(/?$|/.*?$)"
453     ],
454 
455     /**
456      *    儲存以前項目緩存目錄的文件夾路徑
457      */
458 
459     "archivePath": "archive/${build.id}",
460 
461 
462 
463     /**
464      * The space config object is used by the "sencha app publish" command to publish
465      * a version of this application to Sencha Web Application Manager:
466      * 不知道是啥
467      *      "manager": {
468      *          // the space id for this application
469      *          "id": 12345,
470      *
471      *          // space host
472      *          "host": "https://api.space.sencha.com/json.rpc",
473      *
474      *          // Either a zip file path or a folder to be zipped
475      *          // this example shows how to publish the root folder for all build profiles
476      *          "file": "${app.output.base}/../",
477      *
478      *          // These may be specified here, but are best specified in your user
479      *          // ~/.sencha/cmd/sencha.cfg file
480      *          "apiKey": "",
481      *          "secret": ""
482      *      }
483      */
484 
485     /**
486      * 輸出配置,能夠配置不一樣的模版
487      *
488      *     "builds": {
489      *         "classic": {
490      *             "toolkit": "classic",
491      *             "theme": "theme-neptune"
492      *         },
493      *
494      *         "modern": {
495      *             "toolkit": "modern",
496      *             "theme": "theme-neptune"
497      *         }
498      *     }
499      *
500      */
501 
502     "builds": {
503         "classic": {
504             "toolkit": "classic",
505 
506             "theme": "theme-triton",
507 
508             "sass": {
509                 // "save": "classic/sass/save.scss"
510             }
511         },
512 
513         "modern": {
514             "toolkit": "modern",
515 
516             "theme": "theme-triton",
517 
518             "sass": {
519                 // "save": "modern/sass/save.scss"
520             }
521         }
522     },
523 
524 
525     /**
526      * 惟一ID,做爲localStorage前綴。
527      * 一般狀況下,你不該該改變這個值。
528      */
529     "id": "ebe06ef3-c353-495d-90ff-b3ca72030352"
530 }

 

打包以後的項目結構就是這樣,如圖

這種開發模式能夠很方便的同時開發pc端和移動端

若是咱們只是單獨開發pc端或者移動端,在建立的時候咱們能夠根據需求這樣加入classic或者modern命令

::建立pc端應用
sencha -sdk D:\ASPX\ext-premium-6.0.1\ext-6.0.1 generate app --classic app D:\ASPX\Test\www

項目結構以下:

打包後以下:


::建立移動端應用
sencha -sdk D:\ASPX\ext-premium-6.0.1\ext-6.0.1 generate app --modern app D:\ASPX\Test\www

項目結構以下:

打包後以下:

這樣和之前也沒啥區別了

相關文章
相關標籤/搜索