[img]http://dev.helma.org/static/files/0/helma-glossy-100px.png[/img]
下面来看一下Helma中的skin模板:
Helma中的skin模板其实就是一个页面,与html是一样的。但是它的后缀名是.skin,它支持一种脚本格式,这种脚本是Helma程序中经常用到的脚本,我们暂称其为Helma脚本。此脚本非常短小,还现还没有发再像java或aspx那么长的脚本段,一般情况下是它是像下面这样用的。请看代码:
[color=blue]<% response.action %> [/color] 就是一个Helma脚本段。它的值是从Helma的action中传过来的一个值,这里代表一个提交的action名。
下面我们主要说一下Helma中的skin模板的使用:
Helma中的skin模板的使用与jsp、axpx中的使用是完全不同的使用方式。因为这个模板是放在一个对象中的,这个模板只能在自己的对象中使用,除了Global与HopObject中的skin,详细了解请参考我的文档《Helma中的Global与HopObject》[url]http://han2000lei.iteye.com/admin/blogs/327196[/url]。对象使用模板主要有两种方式:以下是Helma使用skin模板的代码:
this.renderSkinAsString("html");//skin是在Helma中对象目录下面存放的以.skin为后缀的模板文件
this.renderSkin("html");//对象目录下面的模板文件名是这样的:html.skin
renderSkinAsString("html");//这样是应用的公共的(Global目录下的)skin模板
renderSkin("html"); //只要前面不加this,都是应用的公共的(Global目录下的)skin模板
现在来介绍一下renderSkinAsString()与renderSkin()的区别
renderSkinAsString();的作用是将一个skin文件抓过来使用,我们可以抓过来后赋值给一个变量。例:
var s = this.renderSkinAsString("html");//将html.skin模板抓过来赋值给一个变量
其实,renderSkinAsString()是将一个模板变成了一个字符串来赋值给我一个变量的。
renderSkin();的作用是将模板展现出来,相当于向我们的浏览器输出一个页面来显示我们的数据。
下面来介绍一下前面有this与没有this的区别:
this.renderSkinAsString("html");
this.renderSkin("html");
renderSkinAsString("html");
renderSkin("html");
先说有this的,因为模板是放在对象中的,那么带this的意思就是自己使用自己的模板。注意是使用的自己的,而Global下面的模板是使用不到的。Golbal下的模板是公共的,如果想使用,前面就不能加this,而必须像这样使用[color=blue]renderSkinAsString("html");[/color][color=blue]或renderSkin("html");[/color]。而HopObject下的模板则必须用this来访问,因为Helma下的每一个对象都有一个HopObject中内容的拷贝(其实是每个对象继承的HopObject下的东西)。
现在再介绍一个在Helma程序中的一个关于skin模板的方法
var str = "hello word";//定义一个字符串
var skin = createSkin(str);//用这个字符串来创建一个skin模板
this.renderSkin(skin);//向浏览器展现这个模板
createSkin(str);是通过字符串来创建一个模板。这样做非常有用,当你必须使用一个模板,而这个模板又非常短小,没有必要定义成一个单独的文件时,这样做非常有用。(如果一个小的模板,里面可能就只有一行代码,这样也要写成一个文件的话,那将会使目录变得非常有臃肿)
最后说一个值的注意的问题:
在模板中的
与
这样的关于路径的问题,要注意了:我们在jsp或是axpx或是html中使用的都是静态的路径。而在Helma的skin模板中,它们不是一个静态路径,更多的是一个action,其代码如下
" >链接
我想要说的是,模板是出现这种关系到路径问题的时候,它都是访问的一个action,这种方式是与它的这种rest风格的编程密切有关的。