zoukankan      html  css  js  c++  java
  • 我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)

    书接上回

    我们看回MainController对应的视图目录

    可以看出我们上回只讨论了Index.html,还有7个视图文件没有讨论过。

    这次来分析这其中我认为最重要的一个Layout.html

    Layout.html中有一段代码如下:

    <div style="100%;margin:0px;padding:0px;font-size:14px;">

    <div style="float:left; padding:20px 5px 20px 0px; 690px;">
    #{layout_content}
    </div>

    其实我们上节分析的index.html最终将替换此处的#{layout_content}

    欲知代码奥秘的同学可以参看LayoutProcessor的Process方法的最后一句话

    context.setContent( HtmlCombiner.combinePage( layoutContent, actionContent ) );

    Layout.html中后面还有2个div块(<div class="sectionPanel userPanel">)分别是找朋友和推荐用户

    纵观Layout.html的代码可以看到,通过左浮动将界面整体分成了2列,右边的列是

    而左边的列则根据不同的action触发,使用#{layout_content}替换。

    Layout.html的末尾使用了<div style="clear:both"></div>来清除浮动,以使得其他的div块(比如页脚部分)不在继续浮动到页面的左侧。

    Layout方法的代码如下:

    public override void Layout() {

    set( "SearchAction", to( Search ) );

    bindSimple();

    List<User> picked = userService.GetPickedList( 20 );
    bindUsers( picked, "picked" );
    }

    没什么可说的,无非是对layout.html视图中变量的绑定。有了上节的基础,这里的代码不难看懂。

    这里分享一个wojilu框架里重要的流程,以下是wojilu作者的描述

    -------------------------------------------------------------------

    1、MVC引擎首先查找当前action所属的controller的Layout内容,如果没有Layout内容,则跳过;

    //1的代码奥秘在此(LayoutProcessor 的Process方法)。

    2、接着MVC引擎在controller所在命名空间中寻找一个叫 LayoutController 的控制器类,如果找到了,则应用其Layout的内容

    3、再接着MVC引擎往上一级命名空间中寻找 LayoutController 类,如果找到了,应用其 Layout 内容 

    //2,3的代码奥秘在此(NsLayoutProcessor 的Process方法中的addLayoutPrivate)。

    -------------------------------------------------------------------
    以我们现在所处的位置来分析以MainController的Index action为例,即
    首先 当前action所属的controller的Layout有内容---MainController的Layout方法。
    执行完之后,wojilu框架在controller所在命名空间中寻找一个叫 LayoutController 的控制器类,即在Users文件夹下寻找LayoutController.cs,没有找到,继续向上一层寻找,找到了最外层(wojilu.Web.Controller)的控制器类LayoutController 
     

    namespace wojilu.Web.Controller {

    public class LayoutController : ControllerBase {

    [CacheAction( typeof( SiteLayoutCache ) )]
    public override void Layout() {


    if (ctx.owner.obj is Site) {

    if (ctx.route.isAdmin || ctx.route.isUserDataAdmin) {
    run( new SiteLayoutController().AdminLayout );
    }
    else
    run( new SiteLayoutController().Layout );
    }
    else if (ctx.owner.obj is User)
    {

    if (ctx.route.isAdmin)
    run(new SpaceLayoutController().AdminLayout);
    else
    run(new SpaceLayoutController().Layout);

    }
    else if (ctx.owner.obj is Group)
    {

    if (ctx.route.isAdmin)
    run(new GroupLayoutController().AdminLayout);
    else
    {
    run(new GroupLayoutController().Layout);
    }

    }
    }

     这段代码的含义是什么,且听下回分解。

  • 相关阅读:
    【转】微信中MMAlert(半透明底部弹出菜单)的使用介绍
    工厂模式
    装饰者模式
    观察者模式
    策略模式
    Android 自定义ViewGroup,实现侧方位滑动菜单
    【转】Android Android属性动画深入分析
    Android ActionBar仿微信界面
    书籍:《沧浪之水》、《盜墓筆記1-8全集》、《鬼 吹 灯(1-8加续)》、《流浪地球》、《二号首长1-5》
    FROM_UNIXTIME 格式化MYSQL时间戳函数
  • 原文地址:https://www.cnblogs.com/xchsp/p/2858378.html
Copyright © 2011-2022 走看看