2012-10-03 10 views
0

這是事情。我有一個按鈕,根據場景,它會表現,看起來有不同的文字。以下是如何呢,大概,看起來像此刻:你會如何在HAML中實施「告訴別人不要」的原則?

- if params[:param_A] && @statement_A 
    %span.button.cancel_button{attribute: "value_B"} 
    - if @statement_B 
     = t('locale_A') 
    - else 
     = t('locale_B') 
- elsif params[:param_A] 
    %span.button.cancel_button{attribute: "value_A"} 
    - if @statement_B 
     = t('locale_A') 
    - else 
     = t('locale_B') 

也有一個CSS類兩個按鈕應該有IF statement_B是真實的。

所以這是一團糟。最近我讀了很多我非常喜歡的「告訴,不要問」的原則,所以我很樂意在這裏應用它......但我不知道如何。我知道我可以做一個幫手,但我想遠離他們,因爲理由(我真的有一些合理的理由這樣做,但這些超出了這個問題的範圍)。我可以將其作爲最後的資源,但寧可找到另一種解決方案。

+0

問題是,爲什麼要將條件邏輯放入HAML模板而不是控制器中?你比控制器更瞭解控制器內部的情況,所以在切換控制之前計算你的值。在視圖中,您只需渲染輸出,而幾乎不需要使用條件測試。 –

+0

我同意@theTinMan,這種條件邏輯不應該在你看來。要麼在控制器中完成它,要麼至少將其放入幫助器中。 – link664

回答

1

這不是真的與haml有關。你可以用的方式開始你的例子看起來應該與tekll-don'r怎麼問:

- if params[:param_A] 
    %span.button.cancel_button{attribute: @object1.value} 
    = t(@object2.locale) 

- if params[:param_A] 
    %span.button.cancel_button{attribute: @object.value} 
    = t(@object.locale) 

(根據您的喜好/真正發言,A/B平均值)

爲了實現這個功能,您需要根據語句值在渲染之前初始化對象。

+0

+1「爲了這個工作,你需要根據語句值在渲染之前初始化對象。」在傳遞給視圖之前,應該在控制器中計算出對象。 –

相關問題