天天看點

MonoRail學習筆記十三:NVelocity的增強功能

本文結合一些小例子來具體談談這些增強功能的使用。

一、支援數組參數

比如在Controller中定義如下方法:

MonoRail學習筆記十三:NVelocity的增強功能

        public void Index()

MonoRail學習筆記十三:NVelocity的增強功能

        {

MonoRail學習筆記十三:NVelocity的增強功能

            PropertyBag.Add("instance", this);

MonoRail學習筆記十三:NVelocity的增強功能

        }

MonoRail學習筆記十三:NVelocity的增強功能

        public static string Welcome(params String[] args)

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

            return String.Join("-", args);

MonoRail學習筆記十三:NVelocity的增強功能

在vm中寫:

MonoRail學習筆記十三:NVelocity的增強功能

$instance.Welcome('arg1', 'arg2')

那麼回輸出如下結果:

arg1-arg2

二、内置字典支援

對于一些傳參的地方很友善,比如我們常用的一種方式:

MonoRail學習筆記十三:NVelocity的增強功能

$HtmlHelper.LabelFor('elementid', 'Name:', "%{class='required', accessKey='N'}")

那麼會自動生成一個字典,裡面包含class和accessKey兩個條目

内置字典我們可以在很多場合用到,比如我們在Controller中定義一個方法:

MonoRail學習筆記十三:NVelocity的增強功能

        public string DictionaryTest(string name, IDictionary attributes)

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

            StringBuilder sResult = new StringBuilder("<input type=\"text\" name='" + name + "'");

MonoRail學習筆記十三:NVelocity的增強功能

            foreach (object key in attributes.Keys)

MonoRail學習筆記十三:NVelocity的增強功能

            {

MonoRail學習筆記十三:NVelocity的增強功能

                object value = attributes[key];

MonoRail學習筆記十三:NVelocity的增強功能

                sResult.Append(" " + key + "='" + value + "' ");

MonoRail學習筆記十三:NVelocity的增強功能

            }

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

            sResult.Append("/>");

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

            return sResult.ToString();

MonoRail學習筆記十三:NVelocity的增強功能

然後在vm中調用:

MonoRail學習筆記十三:NVelocity的增強功能

$instance.DictionaryTest('id', "%{aa='aa1', value='aa2', value2='aa3'}")

MonoRail學習筆記十三:NVelocity的增強功能

會在頁面中生成一個輸入框,具體的html代碼是:

MonoRail學習筆記十三:NVelocity的增強功能

<input type="text" name='id' aa='aa1'  value='aa2'  value2='aa3' />

三、更強的foreach功能(這個功能比較好)

可以指定在foreach之前、之後等特定時候執行一些語句,具體文法如下:

MonoRail學習筆記十三:NVelocity的增強功能

#foreach($i in $items)

MonoRail學習筆記十三:NVelocity的增強功能

#each (this is optional since its the default section)

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears for each item

MonoRail學習筆記十三:NVelocity的增強功能

#before

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears before each item

MonoRail學習筆記十三:NVelocity的增強功能

#after

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears after each item

MonoRail學習筆記十三:NVelocity的增強功能

#between

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears between each two items

MonoRail學習筆記十三:NVelocity的增強功能

#odd

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears for every other item, including the first

MonoRail學習筆記十三:NVelocity的增強功能

#even

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears for every other item, starting with the second

MonoRail學習筆記十三:NVelocity的增強功能

#nodata

MonoRail學習筆記十三:NVelocity的增強功能

       Content rendered if $items evaluated to null or empty

MonoRail學習筆記十三:NVelocity的增強功能

#beforeall

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears before the loop, only if there are items

MonoRail學習筆記十三:NVelocity的增強功能

       matching condition

MonoRail學習筆記十三:NVelocity的增強功能

#afterall

MonoRail學習筆記十三:NVelocity的增強功能

       text which appears after the loop, only of there are items

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

#end

比如如下的一個例子:

MonoRail學習筆記十三:NVelocity的增強功能

#foreach($person in $people)

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <table>

MonoRail學習筆記十三:NVelocity的增強功能

               <tr>

MonoRail學習筆記十三:NVelocity的增強功能

               <th>Name</th>

MonoRail學習筆記十三:NVelocity的增強功能

               <th>Age</th>

MonoRail學習筆記十三:NVelocity的增強功能

               </tr>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <tr

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       Style='color:gray'>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       Style='color:white'>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

#each

MonoRail學習筆記十三:NVelocity的增強功能

       <td>$person.Name</td>

MonoRail學習筆記十三:NVelocity的增強功能

       <td>$person.Age</td>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       </tr>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <tr><td colspan='2'>$person.bio</td></tr>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       </table>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       Sorry No Person Found

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

當我們$people中有兩條記錄時會生成以下html:

MonoRail學習筆記十三:NVelocity的增強功能

<table>

MonoRail學習筆記十三:NVelocity的增強功能

       <tr>

MonoRail學習筆記十三:NVelocity的增強功能

       <th>Name</th>

MonoRail學習筆記十三:NVelocity的增強功能

       <th>Age</th>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <tr style='color:white'>

MonoRail學習筆記十三:NVelocity的增強功能

               <td>John</td>

MonoRail學習筆記十三:NVelocity的增強功能

               <td>32</td>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <tr><td colspan='2'>Monorail programmer</td></tr>

MonoRail學習筆記十三:NVelocity的增強功能

       <tr style='color:gray'>

MonoRail學習筆記十三:NVelocity的增強功能

               <td>Jin</td>

MonoRail學習筆記十三:NVelocity的增強功能

               <td>12</td>

MonoRail學習筆記十三:NVelocity的增強功能
MonoRail學習筆記十三:NVelocity的增強功能

       <tr><td colspan='2'>Castle guru</td></tr>

MonoRail學習筆記十三:NVelocity的增強功能

</table>

當$people為null時會直接輸出:

MonoRail學習筆記十三:NVelocity的增強功能

Sorry No Person Found

四、枚舉類型的改進

為了可讀性,可以自己使用枚舉類型的文字表達進行比較。

例:

MonoRail學習筆記十三:NVelocity的增強功能

public enum OrderStatus

MonoRail學習筆記十三:NVelocity的增強功能

{

MonoRail學習筆記十三:NVelocity的增強功能

  Undefined,

MonoRail學習筆記十三:NVelocity的增強功能

  Created,

MonoRail學習筆記十三:NVelocity的增強功能

  Dispatched

MonoRail學習筆記十三:NVelocity的增強功能

}

那麼可以在vm中如下比較:

MonoRail學習筆記十三:NVelocity的增強功能

#if($order == "Undefined")

MonoRail學習筆記十三:NVelocity的增強功能

  Sorry, but we don't know this order.

MonoRail學習筆記十三:NVelocity的增強功能

#elseif($order == "Created")

MonoRail學習筆記十三:NVelocity的增強功能

  Your order is being processed. Hold on!

MonoRail學習筆記十三:NVelocity的增強功能

#elseif($order == "Dispatched")

MonoRail學習筆記十三:NVelocity的增強功能

  Your order has been dispatched through UPS. Cross your fingers!

MonoRail學習筆記十三:NVelocity的增強功能

(原文中好像有點問題,我重新改了一些代碼)

Castle1.0 RC3中的新功能:

1、在vm中,方法和屬性不再區分大小寫,使用時可以不必記住大小寫了

2、字典功能改進,在vm字典調用時可以直接使用以下方式(參見上面的内置字典支援):

    key='value' key=1 key=1.2 key='1' $key='value' key=$value key='some$value'

   本文轉自永春部落格園部落格,原文連結:http://www.cnblogs.com/firstyi/archive/2007/11/02/945982.html,如需轉載請自行聯系原作者