`
laowang
  • 浏览: 37769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hellolift学习笔记(2)

阅读更多
3.菜单
在页面上可以看到,除了index.html中输出的内容之外,页面上还有一个操作菜单,这个菜单是如何形成的呢?
在default.html中有
<lift:Menu.builder/>

这又是一个snippet的运用,不过是lift内置的snippet,这个class在lift-webkit包中的可以找到,源代码位于lift\src\main\scala\net\liftweb\builtin\snippet\Menu.class,很多lift内置的snippet都在这里可以找到,不过我看到了surround,没有看到bind
Menu的builder方法从LiftRules.siteMap中得到menu的内容,siteMap的定义在Boot.scala中进行,如下
    // Build SiteMap
    val entries = Menu(Loc("Home", List("index"), "Home")) ::
    Menu(Loc("Request Details", List("request"), "Request Details")) ::
    User.sitemap ::: Entry.sitemap
    LiftRules.setSiteMap(SiteMap(entries:_*))


Loc("Home", List("index"), "Home")

定义了一个Loc,三个参数分别是名称,链接和菜单显示的文本,其中第二个参数是相对于web context的URI用'/'分割后得到的数组
Menu的构造如下
case class Menu(val loc : Loc[Any], val kids : Menu*) 
 extends HasKids with Product

这里User.sitemap和Entry.sitemap是两个List[Menu],分别定义了各自相关的菜单项。Entry.sitemap在hellolift\src\main\scala\com\hellolift\model\Entry.scala中定义,Uesr.sitemap则在其继承的MetaMegaProtoUser中定义(位于lift-mapper\src\main\scala\net\liftweb\mapper\ProtoUser.scala)其中的内容以后再仔细学习。
两个Menu,两个List[Menu]构成了entries这样一个新的List[Menu]
再来看最后一句
SiteMap的实现中的定义是
 def apply(kids: Menu *)

定义中的*是Repeated parameters语法,表示最后一个参数是可以重复的(参考《The Definitive Guide To Lift》ch8.8)
entries:_* 表示把变量entries的每一个元素作为参数传递给函数,而不是把变量作为一个参数传递
这里SiteMap(entries:_*),是对object SiteMap.apply()方法的调用,构造了一个SiteMap对象,在调用
LiftRules.setSiteMap方法之后,我们就完成了一个系统菜单的创建,菜单包括这里定义的Home,Request Details和分别有User,Entry的model创建的各自的菜单。

(这里有个疑问,从源代码中看,SiteMap的定义是这样的

case class SiteMap(globalParamFuncs: List[PartialFunction[Box[Req], Loc.LocParam]], kids: Menu*) extends HasKids 

可是在api中查看的构造函数却没有第一个参数,这是怎么回事儿?希望有明白的朋友指点一下)

分享到:
评论
6 楼 laowang 2009-10-15  
alanwu 写道
刚又看了一下lift1.1里object SiteMap定义了def apply(kids: Menu *) = new SiteMap(Nil, kids :_*)

yeah!太感谢了,就是他,又加深了一下apply的了解
5 楼 alanwu 2009-10-15  
刚又看了一下lift1.1里object SiteMap定义了def apply(kids: Menu *) = new SiteMap(Nil, kids :_*)
4 楼 laowang 2009-10-14  
alanwu 写道
lift版本不一样,你看的是1.0的版本,下的是1.1的源码。

汗死,不是没怀疑过这方面的原因,但是对mvn不太熟悉,还不知道怎么查看具体使用的版本。
3 楼 alanwu 2009-10-14  
lift版本不一样,你看的是1.0的版本,下的是1.1的源码。
2 楼 laowang 2009-10-14  
@alanwu
构造函数中有globalParamFuncs和kids两个参数,为什么api说明中只有kids一个?在代码中我也没找到另外的构造函数
1 楼 alanwu 2009-10-14  
引用
可是在api中查看的构造函数却没有第一个参数

什么意思?

相关推荐

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    希沃白板学习笔记.pdf

    希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    人工智能学习笔记,人工智能学习笔记

    人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能...

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于ssm的云的学习笔记系统-ssm-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于Web的云的学习笔记系统设计与实现-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    CCNA学习笔记 CCNA学习笔记

    CCNA学习笔记 CCNA学习笔记 CCNA学习笔记

    nginx学习笔记(软件+学习笔记)

    nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...

    2022吴恩达机器学习笔记汇总(共10章节).zip

    2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...

    docker学习笔记.md

    docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...

    PHP个人学习笔记

    PHP个人学习笔记

    第一行代码 android学习笔记 完整版

    "Android学习笔记" Android学习笔记是Android开发者的必读书籍,书中涵盖了Android系统架构、Activity、Intent、资源管理等多方面的知识。本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中...

    ssh学习笔记1 ssh学习笔记1

    ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1

    contiki 学习笔记

    Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...

Global site tag (gtag.js) - Google Analytics