您的位置:首页 > 其它

我记录综合系统学习研究之用户管理三(wojilu.Web.Controller.Layouts SiteLayoutController)

2013-01-13 21:32 471 查看
书接上回

本节来分析wojilu.Web.Controller.Layouts SiteLayoutController的Layout方法

public override void Layout() {

load("topNav", new TopNavController().Index);

对照framework\views\Layouts\SiteLayout\Layout.html里的前端视图代码看一下

以下代码片段

<body>

#{topNav}
<div id="pageWrap">
<div id="pageWrapInner">

#{header}

<div id="pageMainWrap">

load("topNav", new TopNavController().Index);

是对上面的topNav变量赋值,赋什么值呢,看一下load的定义

protected void load( String sectionName, aAction action ) {
set( sectionName, loadHtml( action ) );
}

可以看出是将framework\views\Layouts\TopNav\Index.html的内容填充后,替换#{topNav}

同理 load("header", new TopNavController().Header);

是将framework\views\Layouts\TopNav\Header.html的内容填充后,替换#{header}

接下来我们看一下TopNavController().Index和framework\views\Layouts\TopNav\Index.html有没有什么可以挖掘的东西。

我们看到TopNavController().Index最后有一句 set( "navUrl", t2( Nav ) );

对framework\views\Layouts\TopNav\Index.html最后的变量#{navUrl}进行了赋值,参见以下:

<script type="text/javascript">var ctx = null;var navUrl = '#{navUrl}';</script>
<script type="text/javascript" src="~js/wojilu.site.topnav.js?v=#{jsVersion}"></script>

欲知此处的奥秘,我们就要看下wojilu.web\static\js\wojilu.site.topnav.js的实现了

$(document).ready( function() {

navUrl = (navUrl + '?url='+window.location.href).toAjax();

......

$.post( navUrl, function(data) {

ctx = data;

......

}

这里通过ajax的post方法,再次请求了服务器TopNavController()的Nav action

public void Nav() {

// TODO 如果是在访问用户空间,则判断:是否好友、是否关注
echoJson( getLoginJsonString() );
}

Nav()方法返回一段json给客户端。动态设置用户的一些状态和权限。



load("header", new TopNavController().Header);

主要是加载site的菜单和子菜单。有空再进行深入探讨。

综上所述,整个流程,有两次服务器访问,一次是页面加载,一次是js请求topnav的json数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: