西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → ExtJS 4組件化編程 使用Ext+.Net動態(tài)加載,面向?qū)ο?/p>

ExtJS 4組件化編程 使用Ext+.Net動態(tài)加載,面向?qū)ο?/h1>

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2011/5/12 22:48:01字體大。A-A+

作者:西西點擊:630次評論:2次標簽: ExtJS

  • 類型:電子教程大。1.3M語言:中文 評分:7.5
  • 標簽:
立即下載
 ExtJS4終于出了正式版,體驗一下面官方推薦的向?qū)ο缶幊套罴褜嵺`

過去的做法是new對象或者Ext.create一個對象,每個對象都要先實例化才能使用

ExtJS4推薦定義類的時候均使用Ext.define,利用xtype動態(tài)加載

修改了以前的一個登陸窗口,感覺用官方推薦的方法還是很不錯的

但還有一些問題沒有想得非常清楚,先把代碼貼出來一起研究下。請看代碼中的注釋~~

使用Ext+.Net,用Direct模式傳遞數(shù)據(jù)

Default.aspx:


view sourceprint?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>ExtJS學(xué)習(xí)</title>

<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />

<link rel="stylesheet" type="text/css" href="css/application.css" />

<script src="ext/ext-all.js" type="text/javascript"></script>

<script src="ext/ext-lang-zh_CN.js" type="text/javascript"></script>

<script type="text/javascript" src="ChcekLogin.ashx"></script>

<script src="js/Ext.app.LoginFormPanel.js" type="text/javascript"></script>

<script type="text/javascript" src="js/Ext.app.LoginDialog.js"></script>

</head>

<body>

<div id="loading-mask"></div>

<div id="loading">

<div class="loading-indicator"><img alt="" src="ext/resources/themes/images/default/shared/large-loading.gif" width="32" height="32" style="margin-right:8px;" align="absmiddle"/>正在加載...</div>

</div>

<script type="text/javascript">

//Ext.Loader.setConfig({ enabled: true });

Ext.onReady(function () {

Ext.BLANK_IMAGE_URL = 'img/s.gif';

Ext.QuickTips.init();

Ext.Msg.minWidth = 300;

//驗證提示信息顯示位置

Ext.form.Field.prototype.msgTarget = 'side';

//如果是繼承Ext.container.Viewport的實例,直接new出來就可以,會自動渲染到body

//本例中Ext.app.LoginDialog繼承自Ext.Window,需要調(diào)用show()方法才能顯示

new Ext.app.LoginDialog().show();

//250毫秒后刪除加載提示信息

setTimeout(function () {

Ext.get('loading').remove();

Ext.get('loading-mask').fadeOut({ remove: true });

}, 250);



})//onReady



</script>

</body>

</html>


Ext.app.LoginDialog.js


view sourceprint?//LoginDialog類,繼承Ext.Window,上層對象使用new Ext.app.LoginDialog().show()動態(tài)實例化并顯示。

Ext.define('Ext.app.LoginDialog',{

extend:'Ext.Window',

title: '登陸',

plain: true,

closable: false,

closeAction: 'hide',

width: 400,

height: 300,

layout: 'fit',

border: false,

modal: true,

//使用xtype: 'LoginFormPanel'動態(tài)實例化Ext.app.LoginFormPanel,并使用api參數(shù)指定load和submit的服務(wù)器端方法。本例中只有submit

items: {itemId: 'loginFormPanel',xtype: 'LoginFormPanel',api: {submit: MyApp.ChcekLogin.Check}}

});


Ext.app.LoginFormPanel.js


view sourceprint?//指定遠程調(diào)用的Provider,注意不能在initComponent中指定,因為config屬性設(shè)置是在initComponent之前,會報api找不到錯誤

Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);



//loginForm類,繼承Ext.form.FormPanel,使用alias注冊至ComponentMgr,上層對象使用xtype:LoginFormPanel動態(tài)實例化。

//form的submit()方法使用Direct提交,上層對象實例化本類的時候使用config中的api屬性指定服務(wù)器端方法。

//很奇怪的是不能在Ext.define或者Ext.apply中指定api屬性,指定了實例化之后也會丟失,然后報url參數(shù)沒有的錯誤,只能在上層對象實例化本類得時候使用config中的api屬性指定api

//如果在這里使用原始的new方法指定api也可以,是ext4中的問題?有誰知道的發(fā)mail告訴我,萬分感謝~~

//使用Ext.define定義本類,定義中使用initComponent指定實例化之前需要執(zhí)行的操作。

//按面向?qū)ο缶幊趟枷耄绢惒徽{(diào)用任何上層對象,方法中不指定scope: this

Ext.define('Ext.app.LoginFormPanel',{



extend:'Ext.form.FormPanel',

initComponent: function(){

//初始化部分需要完成的功能

//alert("Ext.form.FormPanel 開始加載……");

//貌似Ext.apply得來的屬性和在Ext.define中定義的沒什么區(qū)別,為什么要用這個呢?誰來教教我?

Ext.apply(this, {

//labelAlign: 'left'

});

this.callParent();

},

alias:'widget.LoginFormPanel',

labelAlign: 'left',

buttonAlign: 'center',

bodyStyle: 'padding:5px',

frame: true, labelWidth: 80,



items: [

{ xtype: 'textfield', name: 'txt1', fieldLabel: '用戶名稱',

allowBlank: false, anchor: '90%', enableKeyEvents: true,

listeners: {

keypress: function (field, e) {

if (e.getKey() == 13) {

this.nextSibling().focus();

}

} //keypress

}

},

{ xtype: 'textfield', inputType: 'password', name: 'txt2', fieldLabel: '用戶密碼',

allowBlank: false, anchor: '90%', enableKeyEvents: true,

listeners: {

keypress: function (field, e) {

if (e.getKey() == 13) {

this.nextSibling().focus();

}

} //keypress

}

},

{ xtype: 'textfield', name: 'txt3', fieldLabel: '驗證碼',

allowBlank: false, anchor: '90%', mixLength: 6, maxLength: 6, enableKeyEvents: true,

listeners: {

keypress: function (field, e) {

if (e.getKey() == 13) {

this.ownerCt.submit();

}

} //keypress

}

},

{ xtype: 'panel', height: 100, html: '<div style="margin:5px 0px 0px 84px"><a href="#"><img alt="如果看不清楚請單擊圖片更換圖片。" onclick="this.src=\'vcode.ashx?d=\'+new Date();" id="code" height="82" width="242" src="vcode.ashx" border="0"></a></div>', border: false },

{ xtype: 'panel', height: 30, html: '<div style="margin:5px 0px 0px 84px;color:red">*如果圖片不清晰請單擊圖片更換圖片</div>', border: false }

], //items

buttons: [

{ text: '確定', handler: function () { this.findParentByType('LoginFormPanel').submit(); }},

//面向本對象編程,這里不要加入 scope: this,否則function會指定到window上面

{ text: '重置', handler: function () { this.findParentByType('LoginFormPanel').form.reset(); } }

],

submit: function () {

if (this.getForm().isValid()) {

this.getForm().submit({

success: function (form, action) {

window.location = "main.htm";

},

failure: function (form, action) {

//使用form參數(shù)訪問原submit的form

form.reset();

//使用action.result訪問結(jié)果集

Ext.MessageBox.alert('登陸失敗', action.result.data);

}

})

}

}

});


過程已經(jīng)寫到注釋里面了

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)