这里将看到raisl partial 的神奇魔力。
rails 的 ActionView为我们提供了很到位的服务。让我们才view层游刃有余,首先必须得遵守 Rails的一个命名约定(Naming Convention).为了区别partial和其他 view的区别,_x.rhtml是partia的特有称呼。
partial("partial views")是什么?
通常,应用会要解决一类似这样的问题:在页面嵌入一些经常变化的,更模块化子页面。这些子页面可以被嵌入到很多地方。像页面的header和footer 那样。在apache中是通过一些include指令来实现这样的功能,Rails中,我们不需要依赖于 web server,Rails的 render(:partial)或者( render_partial) 就提供了类似的实现。
partial就是一些,以_xxx.rhtml(或_x.rxml)的模板文件,也就是一些rhtml(rxml)片段。
partial("partial views")的用法
partial使我们的view层的逻辑变的更简单。最典型的用处就是广告栏,这是个经常更换内容的小片段,可能你希望在每个页面的某个地方都出现这个广告栏。写在页面中的麻烦你是知道的。
render :partial 的第一个参数是指定_x.rhtml的path/文件名,要注意,这个文件名,我们只需要写成 "x",就可以了。因为,当我们render :partial =>"x"是,rails会去寻找一个叫_x.rhtml的文件。
render_partial "x", obj
render :partial 接受的第二个参数是一个对象(object),这个对象将才partial view 中可直接使用。
同时,你可以自定义参数传递 。
归纳起来有三种方式:
1.实例变量
2.对象(object)
3.指定局部变量
每种的用法,在这里给段简短的示例代码:
1.实例变量
@web2_0 = "uuzone.com"
render_partial "x"
在当前view可用的实例变量,在partial中也是可用的 。 如上面的例子,:
@web2_0 = "uuzone.com" 这个实例变量在 partial _x.rhtml 中是可用的.
2.对象(object)
这个object是个有点迷惑人:
这句代码 ,是view中来一个render_partial 给它的默认object赋值 ,
通过给object赋值或传递了对象, 很有点意思,就可以通过该 partial 的名字,来访问对象的内容。
x
其实在这里 raisl为我们设置了一个变量名为partial名字。这样,就可以使用模板名字来引用对象的方法和属性了。
3.局部变量
@myuu = ["mao","cai","jimmy","tom"]
for uu in @myuu-->
render(:partial=>"x",'uu'=>uu
这个是简单地给 partial传递一个 局部变量 .
partial中就可以直接使用, uu 这个局部变量 .
这里只是简单地给 uu这个局部变量一些简单的字符传, 你可以传递给他任何你希望的对象 .而且参数的个数也是不限制的 .
另外, render(:partial) 还接受一个特殊用法的参数 , :collection.
通常,你可能会想到用一个循环,解决与上面的例子同样的情况,当然我上面的例子是为了说明局部变量参数 . 可是 ,并不需要这么干, rails 考虑到这是个极普遍的做法, render_partial_collection方法让你并不需要像上面的例子那样 .
@myuu = ["mao","cai","jimmy","tom"]
render_partial_collection "x",@myuu
结果, 是一样的. 可是很有意思的是,render_partial_collection 还可以接受一个参数 partial_spacer_template , 发现上面的例子得到的结果,可能是是连接在一起的, partial_spacer_template ,就是将他们分开.
通过给 partial_spacer_template 指定一个值,这个值就也是一个partial,它的内容应该是一些片段或者你想要的任何东西.
所以, 将
render_partial
render_partial_collection
这两个方法用好, 你的view的逻辑 就会变的更简单 ,更清晰 .