2012-03-19 119 views
0

使用Sinatra库,我试图压缩显示HTML代码到一个函数的两个函数。这两个函数只有少量的HTML不同。 下面是一个例子。我可以将HTML放入变量吗?

def make_start_page() 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     <p> Hello </p> 
     <img src="..." /> 
    </body> 
    </html> 
    EOS 
end 

def make_guess_page() 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     <p> Something different </p> 
     <a href="..." >1</a> 
    </body> 
    </html> 
    EOS 
end 

在Ruby函数将调用这两个函数,我想知道是否有可能采取的HTML不同的小部分,并把它传递给这两个函数,将显示一个单一的,浓缩的版本这一页。

def handle() 
    if 1 
     var = "<p> Hello </p> 
     <img src="..." />" 
    elsif 2 
     var = "<p> Something different </p> 
     <a href="..." >1</a>" 
    make_start_guess_page(var) 
end 
+0

所以,它不工作? – 2012-03-19 19:29:08

+0

“干”的概念,即“不要重复自己”,就是你在说的。最好重构成能够理解差异的一段代码,并有条件地将特定上下文中所需的内容替换掉,这样就不会有大量冗余的代码。 – 2012-03-19 20:25:56

回答

2

您可以在定界符内插变量:

def make_start_page(var) 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     #{var} 
    </body> 
    </html> 
    EOS 
end 

例如。

+0

或者也可以使用String的'format'或'%'。 – 2012-03-19 20:26:31

1

没有理由不能这样做。但是,如果你想打印它,你可能不得不在轨道中使用像String#html_safe!= haml

+0

用于HTML安全。 – 2012-03-19 19:45:09

相关问题