java中char的用法,sencha touch 類的使用

 2023-10-27 阅读 21 评论 0

摘要:sencha touch 有一套自己的類機制,可以以面向對象的方式去寫代碼,封裝業務邏輯,sencha touch 的組件、插件、api等都建立在這一套類機制的上面 在實際開發中,我們需要遵循這一套機制,以免造成不必要的麻煩。 ? 所以的類都是繼承于Ext.Base

sencha touch 有一套自己的類機制,可以以面向對象的方式去寫代碼,封裝業務邏輯,sencha touch 的組件、插件、api等都建立在這一套類機制的上面

在實際開發中,我們需要遵循這一套機制,以免造成不必要的麻煩。

?

所以的類都是繼承于Ext.Base

java中char的用法,定義一個類的語法:Ext.define(className, properties);

其中className是類名,properties屬于配置。

?

sencha touch開發推薦使用mvc結構,在這里我推薦以下結構

jquery touchmove、

如圖所示,我們一般在app文件夾中進行開發,其中config屬于全局配置文件,是一個靜態類

代碼如下:

 1 //全局配置文件
 2 Ext.define('app.config', {
 3     //設置別名是為了方便調用,這樣直接config.name就能獲取到變量。
 4     alternateClassName: 'config',
 5     statics: {
 6         version: '1.0.0',
 7         used: {
 8             add: 'http://www.361y.cn:8080/Json/Used.asmx/Add',
 9             update: 'http://www.361y.cn:8080/Json/Used.asmx/Update',
10             destroy: 'http://www.361y.cn:8080/Json/Used.asmx/Delete',
11             list: 'http://www.361y.cn:8080/Json/Used.asmx/List',
12             one: 'http://www.361y.cn:8080/Json/Used.asmx/One'
13         }
14     }
15 });

如上所示,className的命名屬于命名空間,此靜態類的className是app.config,在這里表示app文件夾中的config.js文件。

蘋果touch功能。為了方便調用,我們為他配置了alternateClassName屬性。

我們在statics屬性中配置全局變量,此類中我們只是配置了變量。

?

我們還可以在里面配置方法,不過為了方便維護,在另一個靜態類中進行配置。

haptic touch如何開啟。代碼如下:

  1 //公用類
  2 Ext.define('app.util', {
  3     alternateClassName: 'util',
  4     statics: {
  5         //比較兩個對象是否相等
  6         equals: function (x, y) {
  7             if (x === y) {
  8                 return true;
  9             }
 10             if (!(x instanceof Object) || !(y instanceof Object)) {
 11                 return false;
 12             }
 13             if (x.constructor !== y.constructor) {
 14                 return false;
 15             }
 16             for (var p in x) {
 17                 if (x.hasOwnProperty(p)) {
 18                     if (!y.hasOwnProperty(p)) {
 19                         return false;
 20                     }
 21                     if (x[p] === y[p]) {
 22                         continue;
 23                     }
 24                     if (typeof (x[p]) !== "object") {
 25                         return false;
 26                     }
 27                     if (!Object.equals(x[p], y[p])) {
 28                         return false;
 29                     }
 30                 }
 31             }
 32             for (p in y) {
 33                 if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
 34                     return false;
 35                 }
 36             }
 37             return true;
 38         },
 39         //重寫ajax(需要初始化)
 40         overrideAjax: function () {
 41             var me = this;
 42             //開始加載
 43             Ext.Ajax.on('beforerequest',
 44             function (connection, options) {
 45                 if (!options.hidMessage) {
 46                     me.showMessage('正在努力加載中...');
 47                 }
 48             });
 49             //加載成功
 50             Ext.Ajax.on('requestcomplete',
 51             function (connection, options) {
 52                 me.hideMessage();
 53             });
 54             //加載失敗
 55             Ext.Ajax.on('requestexception',
 56             function (connection, options) {
 57                 if (!options.hidMessage) {
 58                     me.showMessage('加載失敗,請檢查網絡是否正常...', true);
 59                 }
 60             });
 61         },
 62         //重寫list(需要初始化)
 63         overrideList: function () {
 64             //重寫分頁插件
 65             Ext.define("Ext.zh.plugin.ListPaging", {
 66                 override: "Ext.plugin.ListPaging",
 67                 config: {
 68                     //自動加載
 69                     autoPaging: true,
 70                     //滾動到最底部時是否自動加載下一頁數據
 71                     noMoreRecordsText: '沒有更多內容了',
 72                     loadMoreText: '加載更多...' //加載更多按鈕顯示內容
 73                 }
 74             });
 75             //重寫下拉刷新
 76             Ext.define("Ext.zh.plugin.PullRefresh", {
 77                 override: "Ext.plugin.PullRefresh",
 78                 config: {
 79                     lastUpdatedText: '上次刷新時間:',
 80                     loadedText: '等一會再刷新吧...',
 81                     loadingText: '加載中...',
 82                     pullText: '下拉可以手動刷新',
 83                     releaseText: '松開可以刷新',
 84                     lastUpdatedDateFormat: 'Y-m-d H:i'
 85                 }
 86             });
 87             //重寫List
 88             Ext.define("Ext.zh.List", {
 89                 override: "Ext.List",
 90                 config: {
 91                     //取消選擇效果
 92                     selectedCls: '',
 93                     //禁用加載遮罩,防止跳轉時頁面卡頓,使用統一的遮罩效果
 94                     loadingText: false,
 95                     cls: 'list',
 96                     deferEmptyText: false,
 97                     emptyText: '沒有更多內容了'
 98                 }
 99             });
100         },
101         //重寫Pick相關(需要初始化)
102         overridePick: function () {
103             Ext.Date.monthNames = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"];
104             Ext.define("Ext.zh.DatePicker", {
105                 override: "Ext.picker.Date",
106                 config: {
107                     yearFrom: 2000,
108                     monthText: '月',
109                     dayText: '日',
110                     yearText: '年'
111                 }
112             });
113             Ext.define("Ext.local_zh_cn.Picker", {
114                 override: "Ext.picker.Picker",
115                 applyDoneButton: function (config) {
116                     if (config) {
117                         if (Ext.isBoolean(config)) {
118                             config = {};
119                         }
120                         if (typeof config == "string") {
121                             config = {
122                                 text: config
123                             };
124                         }
125                         Ext.applyIf(config, {
126                             ui: 'action',
127                             align: 'right',
128                             text: '確定'
129                         });
130                     }
131                     return Ext.factory(config, 'Ext.Button', this.getDoneButton());
132                 },
133                 applyCancelButton: function (config) {
134                     if (config) {
135                         if (Ext.isBoolean(config)) {
136                             config = {};
137                         }
138                         if (typeof config == "string") {
139                             config = {
140                                 text: config
141                             };
142                         }
143                         Ext.applyIf(config, {
144                             align: 'left',
145                             text: '取消'
146                         });
147                     }
148                     return Ext.factory(config, 'Ext.Button', this.getCancelButton());
149                 }
150 
151             });
152         },
153         //app初始化執行
154         inIt: function () {
155             this.overrideList();
156             this.overrideAjax();
157             this.addMessage();
158             this.overridePick();
159         }
160     }
161 });

如此我們可以通過util.equals('a','b')調用指定方法,另外我們可以通過this來進行內部調用

?

以上兩個類不會自動創建,我們必須創建之后才能調用。一般我們在app.js中進行創建

iphone touch,代碼如下:

 1 Ext.application({
 2     name: 'app',
 3     requires: ['app.config','app.util', 'Ext.MessageBox'],
 4     controllers: ['Main', 'Used', 'User', 'Job'],
 5     launch: function () {
 6         // Destroy the #appLoadingIndicator element
 7         Ext.fly('appLoadingIndicator').destroy();
 8         util.inIt();
 9         // Initialize the main view
10         Ext.Viewport.add(Ext.create('app.view.Main'));
11     }
12 });

在此代碼中我們通過requires進行了創建。

值得注意的是,全局變量,公共方法不止以上一種寫法,你可以自行嘗試一下其他寫法。

?

getchars、下面來說一說普通類,例如一個視圖。

代碼如下:

 1 Ext.define('app.view.About', {
 2     alternateClassName: 'about',
 3     extend: 'Ext.Container',
 4     xtype: 'about',
 5     requires: ['ux.plugin.ConHref'],
 6     config: {
 7         title: '關于我們',
 8         margin: 10,
 9         plugins: 'conHref',
10         html: '<p>“拋磚網”國內首家首創純實戰型培訓機構,提供在線培訓、技術指導及答疑!</p><br/><p>團隊通過360全方位技術培訓+1度手把手技術指導,保證每一個學員能最快掌握實際工作技能;</p><br/><p>讓每一個學員都能站在我們的肩膀上,展翅高飛。趕快關注“拋磚網”。</p><br/><p>網址:<a href="http://www.361y.cn">www.361y.cn</a></p><p>QQ群:263271569</p><p>官方微信號:paozhuanedu</p><br/><p><strong>本期課程說明及付費鏈接:</strong></p><p><a href="http://item.taobao.com/item.htm?id=36768998716">item.taobao.com/item.htm?id=36768998716</a></p>'
11     }
12 });

?

這是一個視圖類,所在路徑為app/view/About.js

sencha Touch權威指南,在這里設置alternateClassName是為了方便創建,我們可以通過Ext.create('about')來創建類,等同于Ext.create('app.view.About')

extend屬性表示他繼承于Ext.Container這個類。

xtype是為了方便在控制層中進行監聽,通常此屬性是必須的。

requires表示這個類所依賴的類,在這里是指一個插件。通過config.plugins來使用

java char的用法,config表示此類中的各種配置,框架自動幫每一個配置項添加了以下方法:

getter方法 - 如getName就是返回name的當前值。

setter方法 - 如getName就是為name設置一個新值。

getter和setter都是自動生成的,建議大家使用它們來存取類里面的數據。ST的每一個組件都使用了getter和setter的模式,這意味著如果我們知道一個配置項,也就知道如何獲取和設置它的值了。

sencha的中文。這也讓你的的代碼更整潔。

如果你需要在視圖創建時就添加一個按鈕,并且能夠動態更新。

可以如下:

 1 /**
 2 * 基于Ext.navigation.Bar
 3 * 去除動畫切換等功能
 4 * 可以靈活的在NavigationView子項中配置屬性
 5 * 小寫開頭表示這是私有控件,不能直接使用
 6 */
 7 Ext.define('ux.navigationBar', {
 8     extend: 'Ext.TitleBar',
 9     requires: [
10         'Ext.Button',
11         'Ext.Spacer'
12     ],
13     config: {
14         /*導航欄標題*/
15         title: null,
16         /*item默認類型*/
17         defaultType: 'button',
18         layout: {
19             type: 'hbox'
20         },
21         /*返回按鈕*/
22         backButton: {
23             align: 'left',
24             ui: 'back',
25             hidden: true
26         }
27     },
28     /*初始化配置*/
29     constructor: function (config) {
30         config = config || {};
31         if (!config.items) {
32             config.items = [];
33         }
34         this.callParent([config]);
35     },
36     /*創建返回按鈕*/
37     applyBackButton: function (config) {
38         return Ext.factory(config, Ext.Button, this.getBackButton());
39     },
40     /*更新返回按鈕*/
41     updateBackButton: function (newBackButton, oldBackButton) {
42         if (oldBackButton) {
43             this.remove(oldBackButton);
44         }
45         if (newBackButton) {
46             this.add(newBackButton);
47 
48             newBackButton.on({
49                 scope: this,
50                 tap: this.onBackButtonTap
51             });
52         }
53     },
54     /*點擊返回按鈕時觸發*/
55     onBackButtonTap: function () {
56         this.fireEvent('back', this);
57     }
58 });

如上,applyBackButton方法在視圖創建時會自動調用,只有返回的值部位false,并且不等于舊的值,就會自動觸發updateBackButton方法,我們可以在里面進行邏輯處理。

getchar的功能。?

另外一個類還值得主要的屬性有:

alias?:類似于alternateClassName,但是它的值只能是string數組

inheritableStatics:可繼承的靜態方法列表

mixins?:額外需要繼承的類

platformConfig:特殊平臺或者主題中的默認配置

singleton:是否單例模式

uses?:不一定依賴的類

?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/164438.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息