Moonscript的常用WEB特性

2k 词

下面是一个简单的moonscript脚本,值得注意的地方有几点。
1.Moonscript如何表示List列比数据结构。
2.Moonscript的路由样式。
3.Moonscript如何取得请求URL中的参数变量值。
4.Moonscript如何遍历List数据结构。(pairs)
5.Moonscript如何显示HTML。
6.Moonscript判空语句。

1.Moonscript如何表示List列比数据结构。

Lua种的Table在Moonscript种,便成了如下的格式。

– Moonscript
[code]
list_items = {
“item1”:“test item1”
“item2”:“test item2”
“item3”:“test item3”
}
[/code]

–Lua
[code]
local list_items = {
[“item1”] = “test item1”,
[“item2”] = “test item2”,
[“item3”] = “test item3”
}

[/code]

值得注意的地方就是,每个表元素之间没有了","逗号分割。

如何直接翻译成Lua后,代码形式如下:

2.Moonscript的路由样式。

[code]
item: “/item/:name”:=>
[/code]
Moonscript是用这种形式表示路由的“item”, “/item/:name”表示URL后面可以跟的参数表量。

3.Moonscript如何取得请求URL中的参数变量值。

[code] item_description = list_items[@params.name] [/code] @params.name中,params表示输入参数的集合数据结构,".name"就是URL种的变量名。

4.Moonscript如何遍历List数据结构。(pairs)
[code]
for item in pairs list_items
li ->
a href: @url_for(“item”, name:item), item
[/code]
Moonscript遍历Table,for关键字后面不用加do end结构。另外,可以使用pairs关键字,而没有ipairs关键字。

5.Moonscript如何显示HTML。

逻辑和模板放到一起写,“业务”和“表示”放到一起写不便于解耦,但是对于懒人来说,这个特性就比较方便了。

[code]
@html ->
h1 @params.name
h2 “Result list items”
p item_description
div “abc”
[/code]

@html ->下面就可以直接用短关键字,快捷的生成HTML语句。

6.Moonscript判空语句。

[code] item_description = list_items[@params.name] unless item_description [/code]

unless关键字用于判空,更接近自然语言。感觉用起来像Cobol的感觉,关键字好长。

后记:
其实Moonscript也有语法缩进的,如果缩进不对在编译的时候会报错,这和Python,Cobol很像。

另外,如下:
[code]
@html ->
[/code]

“@html”和"->"之间有一个空格。

Moonscript懒人的福音。

代码列表:
[code]
lapis = require “lapis”

list_items = {
“item1”:“test item1”
“item2”:“test item2”
“item3”:“test item3”
}

list_div = {
“div1”:“div1”
“div2”:“div2”
“div3”:“div3”
}

class extends lapis.Application
[index: “/”]:=>
@html ->
h1 “test page”
a href: @url_for(“list_items”), “Check out my list items”

@html ->
  ul ->
    for item in pairs list_items
      li ->
        a href: @url_for("item", name:item), item
item_description =  list_items[@params.name]
unless item_description
  return "Not found", status:404

@html ->
  h1 @params.name 
  h2 "Result list items"
  p item_description
  div  "abc"
@html ->
  for item in pairs list_div
    h1 item
    h1 "test"

[/code]