1. 程式人生 > >ITOO-EasyUI動態選單載入

ITOO-EasyUI動態選單載入

    在ITOO中,我們的右上角有幾個選單,一直想把它做成類似今目標的存在,後臺可以配置 。時至今日,終於成功了,下面是我的一點思路:

 

  根據EasyUI中選單按鈕的載入Demo,如下,可以看出選單的載入實現方式:

// 這裡顯示的相當於上方的圖片
<a href="#" class="easyui-menubutton" data-options="menu:'#mm2',iconCls:'icon-edit'">Edit</a>
// 這裡顯示的主選單下的子模組
<div id="mm2" style="width:100px;">
	<div>Help</div>
	<div>Update</div>
	<div>About</div>
</div>
選單通過menu屬性來載入其子模組,通過iconCls屬性顯示不同的圖示。那麼思路就是拼接這樣的樣式即可。在前臺中,我通過頁面載入完成後ajax同步呼叫controller查詢系統及模組級別的選單,放入到html的div中。

  1.html

		<div id="aa">
		
		</div>
2.js。

  頁面載入完成後,通過js呼叫後臺,然後根據查詢出的系統和模組的json,append到這個div中。

	$(function(){
		// 頁面載入的時候呼叫,查詢系統的模組
   		$.ajax({
                   type: "GET",
                   url: 'getSystem',
                   data: {},
                   dataType: "html",
                   success: function(data){
            	       $('#aa').append(data);
            	       $.parser.parse('#aa');
                   }
   		});
      })
這裡通過$.parser.parse('#aa')這句話,可以重新解析頁面,這裡解析的是div標籤 內容,使其可以有css的樣式,相當於一個佈局的重新整理。

3.Controller層

  controller層主要是拼接需要的字串,首先查詢系統級別的,然後迴圈根據系統的id去查詢各模組下的內容。

/**
	 * 查詢系統的列表框
	 * @param response
	 */
	@RequestMapping("/getSystem")
	public void getTrendsLink(HttpServletResponse response){
		List<Application> systemList=new ArrayList<Application>();
		String strStyle ="";
		String total ="";
		systemList = applicationBean.queryParentApplication();
		if(systemList.size() < 1 || systemList == null){
			JsonUtils.outJson(response, "");		
		}else{
			strStyle +="<div style=\"float:right; margin-right:4%; margin-top:15px;\">";
			for(int i =0;i<systemList.size();i++){
				Application app =(Application)systemList.get(i);
				//步驟1:拼接系統最外層的div標籤
				strStyle += "<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" style=\"width:46px; height:56px;margin-left:4px;\" data-options=\"size:'large',iconCls:'"+app.getId()+"',iconAlign:'top',plain:false,menu:'#"+app.getId()+"'\">"+ app.getApplicationName().substring(0,2) +"</a>";
				
				System.out.print(app.getId());
				
				total += "<div id=\""+app.getId()+"\" style=\"display: none\">";		
				
				total += getChildLink(app.getId(),app.getApplicationName());
				
				total += "</div>";
				
			}
			strStyle += "<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" style=\"width: 46px; height: 56px;margin-left:4px;\" data-options=\"size:'large',iconCls:'icon-helpload',iconAlign:'top',plain:false\" onclick=\"javascript:$('#pg').pivotgrid('layout')\">幫助</a></div>";
		}
	
		 System.out.println(strStyle+total);
		JsonUtils.outJson(response,strStyle+total );//strStyle+total
	}
	
	/**
	 * 查詢系統下的模組	
	 * @param parentId 系統id
	 * @param name  系統名稱
	 * @return  String字串
	 */
	public String getChildLink(String parentId,String name){
	//	<div onclick="addTab('基礎系統-專業分流管理','http://192.168.24.246:8091/itoo-basic-professional-web/toProfessionalList?id=DxdYBwWuz12MsPEnJdGksk')">專業分流管理</div>
		String total ="";
		List<Application> childList=new ArrayList<Application>();
		childList =applicationBean.queryApplicationByParentId(parentId);
		if(childList.size() < 1 || childList == null){
			return total;
		}else{
			// 步驟2:拼接各個子模組的div
			for(int i=0;i<childList.size();i++){
				Application app =(Application)childList.get(i);

				//步驟3: 判斷模組下是否有其他頁面,有——加上ID,沒有則不加
				//if(getChildLink(app.getId(),app.getApplicationName()) !=""){
					//步驟3.1 拼接加上id
					total += "<div onclick=\"addTab('"+ name+'-'+app.getApplicationName() +"','"+app.getApplicationUrl()+"?id="+app.getId()+"')\">"+app.getApplicationName()+"</div>";
			//	}else{
					//步驟3.2 拼接不加id
			//		total += "<div onclick=\"addTab('"+ name+'-'+app.getApplicationName() +"','"+app.getApplicationUrl()+"')\">"+app.getApplicationName()+"</div>";
			//	}
			}
		}
		return total;
	}
最後根據返回值到ajax的回撥函式中,就完美解決了動態載入選單的問題。這裡有點煩的就是controller拼接字串,需要步步除錯到EasyUI需要的格式,細心點都可以成功。

後續我們會加上shiro標籤來根據登入的使用者角色來動態顯示各系統,系統還在一步步完善中,2.0加油!