2012-03-19 194 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

相關問題