2011-01-20 4 views
3

私はImageクラス持っリフトのWebフレームワークDRY派遣

override def toHtml = 
    <img src={"/gallery/image/%s/%s/%s/%s" format (slug.is, "fit", 100, 100)} /> 

をし、それがこののbeacause作品:

def dispatch = { 
    LiftRules.dispatch.append { 
     case Req("gallery" :: "image" :: slug :: method :: width :: height :: Nil, _, _) => { 
      () => Image.stream(slug, method, width, height) 
     } 
    } 
} 

することができますようにあなたがURLを定義する必要があるので、これはDRYのアプローチではありません(/ gallery/image )を2回繰り返す。

DRYにすることはできますか?あなたはLiftRulesか何かから道を得ることができますか?

ありがとうございます。 Etam。

+0

私はリフトについて何も知らないが、私はあなたの意見を繰り返すとは思わない。私はもっ​​と 'val a =" foo "のように見える。 println(a) 'では、' a'が何をするのかと一度それを呼び出すことを言うために 'a'を二回言及します。私は、URL文字列が作成される方法にエラーの余地があると思いますが、それでもまだ十分です。 – huynhjl

+0

DjangoでHttpResponseRedirect(reverse( 'arch-summary'、args = [1945]))が好きなものがあります。逆の方法は私が探しているものです。 – Etam

答えて

4

これは、リフトリストにDavid Pollakで答えた:要するに

https://groups.google.com/d/topic/liftweb/VG0uOut9hb4/discussion

、あなたは:

は(この場合にはパス)を共通のものをカプセル化したオブジェクトに:

object ImageGallery { 
    val path = "gallery" :: "image" :: Nil 
    val pathLen = path.length 
    def prefix = path.mkString("/", "/", "/") 
} 

ディスパッチメソッドのパターンマッチでオブジェクトを使用できるようにするカスタム未適用メソッドを作成します。

<img src={ImageGallery.prefix+"%s/%s" ...}> 

...と::

object ImageGallery { 
    // ... 
    def unapply(in: List[String]): Option[List[String]] = 
    Some(in.drop(pathLen)).filter(ignore => in.startsWith(path)) 
} 

あなたのコードは今ある

case Req(ImageGallery(slug :: method :: width :: height :: _), _, _) => // ... 

は、より多くの提案をメッセージスレッドを参照してください。

関連する問題