ExtJs七(ExtJs Mvc創建ViewPort)
小編:管理員 322閱讀 2022.09.07
前言
在4.1的時候,要先創建一個擴展于Ext.app.Application的類,然后用create創建它的實例來開始應用程序的。而在4.1.1,則可直接調用application方法開始執行應用程序,簡化了。調用application方法,其參數是一個配置對象,主要配置項有以下三個: name:用來定義應用程序的名稱,在這里是ExtMVCOne。 appFolder:應用程序的路徑,這里是scripts/app autoCreateViewport:默認值為false,在這里要設置為true,讓它自動加載\Script\app\View目錄下的Viewport.js文件。因為目錄已經在Loader中配置好了,因而不用設置目錄。
這是上一節中的配置
Ext.Loader.setConfig({ enabled: true, paths: { 'Ext.ux': 'scripts/extjs/ux', 'ExtMVCOne': 'scripts/app' } });復制
創建ViewPort
在VS2010中,打開首頁Index.cshtml,在用戶信息下加入以下代碼后變成:
復制這樣,應用程序就運行起來了,現在要創建Viewport.js。在解決方案資源管理器中,在\Script\app\View目錄上單擊右鍵添加一個名為Viewport.js的腳本文本。在文件中需要定義一個從Ext.container.Viewport派生的類,用來搭建應用程序的整體界面。本示例將構建一個類似于Ext JS API的用戶界面,分頂部、主區域、底部三部分。頂部主要是顯示系統名稱和退出等按鈕,主區域使用標簽頁來顯示管理的內容,而文章內容的詳細信息頁也會已標簽頁形式顯示。底部純粹是占位區,可以寫一些狀態信息等,但是在本示例就不做了,有興趣自己研究一下。
目標明確后,先將新類的框架定義好,代碼如下:
Ext.define('ExtMVCOne.view.Viewport', { extend: 'Ext.container.Viewport', initComponent: function () { var me = this; me.callParent(arguments); } });復制
代碼中,一定要注意類名,類名中最后一個小數點之前的內容為目錄,之后的是文件名。在這里因為ExtMVCOne指向的目錄是scripts/app,因而文件所在目錄是scripts/app/view,正是當前文件所在目錄。
現在考慮一下使用什么布局,因為是垂直劃分的三部分,因而不需要使用到Border布局了,使用VBox就可以了,現在加入布局:
layout: { type: 'vbox', align: 'stretch' },復制
這里一定要加align,以便布局可以填滿寬度。
現在,在items中加入界面的三個部分。頂部因為還要添加按鈕,因而使用一個工具欄比較方便;中部是標簽頁;底部只是占位,用Component就行了。代碼如下:
me.items = [ { xtype: "toolbar", height: 53, id:"North" }, { xtype: "tabpanel",flex:1, items: [ { title: "文章管理" }, { title: "圖片管理" }, { title: "用戶管理" } ] }, { xtype: "component",height:13,id:"South" } ];復制
代碼中,頂部的高度是53,底部是13。主體部分設置flex為1,表示它會占據剩余的空間。定義id,既方便未來訪問,也方便定義樣式。
現在可以F5運行,登錄后可以看到如下圖所示界面:

基本框架出來了,要美化一下頂部和底部。在app目錄下創建一個resources目錄,在這里將存放應用程序的資源,如樣式文件和圖片。接著下下面創建css目錄和images目錄,css目錄用來放置應用程序樣式文件,images目錄用來放置圖片。在css目錄下創建一個app.css的樣式文件。然后添加一下樣式:
#North,#South{ background:#6C86AE !important; background-image: -webkit-gradient(linear,50% 0%, 50% 100%, color-stop(0%, #6C86AE), color-stop(100%, #526C95)) !important; background-image: -webkit-linear-gradient(top,#6C86AE, #526C95) !important; background-image: -moz-linear-gradient(top,#6C86AE, #526C95) !important; background-image: -o-linear-gradient(top,#6C86AE, #526C95) !important; background-image: -ms-linear-gradient(top,#6C86AE, #526C95) !important; background-image: linear-gradient(top,#6C86AE, #526C95) !important; border: 1px solid #567422 !important; }復制
將樣式文件添加到首頁,然后刷新一下頁面,可以看到如下的效果

現在看上去樣子差不多了,接下來我們來改一下頂部的顯示。先加一個Component來顯示項目名稱,代碼如下:
xtype: "toolbar", height: 53, id: "North", items: [ { xtype:'component',cls:'logo',html:'ExtJs MVC 系統'}, ]復制
這里需要為組件定義一個樣式logo來改變顯示文字的大小,樣式代碼如下:
.logo { padding: 10px 10px 10px 31px !important; /*background: url(../images/logo.png)no-repeat 10px 12px;*/ color: #fff !important ; font-size: 18px !important; font-weight: bold !important; text-shadow: 0 1px 0 #4e691f !important; }復制
接著在工具來的最右邊加一個退出按鈕,用圖標顯示。先將圖標文件(logout.png)復制到images目錄。然后,添加以下代碼來添加圖標:
"->", { iconCls: "logout", tooltip: "退出", scale: "large", handler: function () { window.location = "Account/Logout"; } }復制
“->”符合會讓工具欄的圖標顯示在右邊。圖標定義了scale為large,表示顯示的是32*32的大圖標。單擊按鈕會將頁面轉到Account控制器的Logout方法。 在css文件中添加logout樣式:
.logout{ background:url("../Images/logout.png") !important; }復制
當然還要在Images文件夾中添加相應的圖片哦。
刷新一下頁面看看

退出操作不難,順便完成了,切換到Account控制器,添加一個Logout方法,方法內,調用SignOut方法退出認證,并調整到首頁就行了,代碼如下:
public ActionResult Logout() { FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); }復制
重新生成一下應用程序,然后在瀏覽器打開頁面測試一下退出按鈕?梢郧袚Q到登錄頁,表示退出操作已經完成了。
現在考慮主面板部分。因為用戶管理只有系統管理員可以看到,因而現在這模式不便于進行處理,需要將它抽出來,先創建面板對象,然后根據權限添加需要的標簽頁。將items中的主面板代碼刪除,然后在它之前添加創建主面板的代碼:
me.mainpanel = Ext.widget("tabpanel", { flex: 1, id: "mainPanel", items: [ { title: "文章管理" }, { title: "圖片管理" } ] });復制
代碼中,添加了一個id,以便未來調用。文章管理和圖片管理因為全部用戶都可見,因而可以預添加在標簽頁里。 在Viewport的items里,把mainpanel添加到原來的代碼位置。
接著要做的是通過Userinfo判斷用戶是否管理員,如果是,添加用戶管理標簽頁,代碼如下:
varroles = "." + ExtMVCOne.Userinfo.Roles.join('.') + "."; if (roles.indexOf(".系統管理員.") >= 0) { me.mainpanel.add({ title: "用戶管理" }); }復制
因為在Userinfo中,角色是保存在數組中的,因而這里將其轉換為字符串后再比較。調用標簽頁的add方法就可將新標簽添加到標簽頁中了。
現在,在瀏覽器中用test用戶登錄頁面,將看不到用戶管理了。換admin登錄,就可看到用戶管理。這說明權限控制已經成功了。
這是用admin登錄的結果

同理,這是用test普通用戶登錄的

示例代碼下載鏈接 http://files.cnblogs.com/aehyok/ExtJsViewPort.rar
相關推薦
- ExtJs十一(ExtJs Mvc圖片管理之一) 前言圖片管理要在兩個地方使用:一是標簽頁內的圖片管理,一是文章內容編輯時嵌套到插入圖片的窗口內。因而,將圖片管理做成一個擴展比較方便。當然,做成MVC模式也行,不爭論,不討論。要記住,擴展要寫在Scripts\ExtJS\Ux目錄下,因為在路徑的設置中,擴展目…
- Hibernate Criterion 在查詢方法設計上能夠靈活的依據Criteria的特點來方便地進行查詢條件的組裝.Hibernate設計了CriteriaSpecification作為Criteria的父接口,以下提供了Criteria和DetachedCriteria.Criteria和DetachedCriteria的主要差別在于創建的形式不一樣,Criteria是在線的,所…