2013-02-05 92 views
1

我有一個迭代實體數組的模板。把手助手將視圖插入基於條件邏輯的模板

我想顯示一些基於某些邏輯的這些實體的'刪除'按鈕,我只是想了解最好的方法來做到這一點。

實際刪除按鈕將與下面的標記被渲染,注意標記包括對內置的行動幫手:

<button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button> 

我想和

替換此通話
{{optionalRemoveEntityButton entity}} 

我想創建一個logicless模板,所以我想也許我可以創建像一個幫手:

Ember.Handlebars.registerHelper('optionalRemoveEntityButton', function(entity, options) { 
    logicForDeterminingWhetherToShowView 
    removeEntityButtonView = howDoILoadAViewProgrammatically? 
    return removeEntityButtonView; 
}); 

我不明白如何以編程方式加載視圖。我想使用一個視圖,因爲這個幫助器不只是返回一些簡單的標記。它還包括致電{{action}}幫手。

除非有更好的方法來實現我想要做的?

回答

1

我有一個迭代實體數組的模板。我想基於某些邏輯顯示一些這些實體的「刪除」按鈕,我只是想了解執行此操作的最佳方法。

這是一個很常見的用例。這種邏輯的理念位於控制器中。

實際刪除按鈕將與下面的標記被渲染,注意標記包括對內置的動作助手:<button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button>

我想和{{optionalRemoveEntityButton entity}}

替換此通話

我建議你保留原始標記。

除非有更好的方法來實現我想要做的?

保持邏輯出你的模板是一個好目標,但通常這並不意味着建立大量的句柄助手。通常情況下,只有在找到某些在許多視圖中重複使用的顯示邏輯時,纔會構建幫助器。

另一種方法是使用{{#if}}幫助有條件地顯示按鈕

{{#if showDeleteButton}} 
    <button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button> 
{{/if}} 

你需要你的ArrayController的itemController屬性設置爲一個控制器,將每個包裹的名字(可能是一個ObjectController)個別項目。然後在該itemController上定義showDeleteButton方法。有關詳細設置,請參閱Ember.ArrayController文檔。

+1

嗨邁克爾..感謝這..這工作真的很好。如果有其他人出現,他們應該知道'屬性'原型擴展需要應用於條件邏輯函數。這會告訴Ember如同屬性一樣處理函數,這樣如果{{#if}}條件助手將調用該函數並使用返回值來確定是否執行條件塊。否則,{{#if}}助手只是檢查函數是否存在....謝謝! – ianpetzer