2017-08-01 77 views
0

比方說,我有兩個項目的對象:把手訪問變量動態

state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }

在車把上,我遍歷另一個對象,其中鍵與foobar對應。

我想訪問對象以動態的方式顯示上面,像這樣:

{{#if @root.state['action-' @key '-collapsed']}}

這是可以實現的,最好不使用自定義的助手?

回答

1

您將使用Lookup內置幫助程序進行動態參數解析。然而,你的情況稍微複雜一些,因爲你想連接一些字符串來創建你的密鑰。如果您的state對象將相同的鍵作爲您的其他對象,將會更容易。這將允許你做到以下幾點:

{{#if (lookup @root.state @key)}} 

{{/if}} 

注意上面使用把手子表達式,使我們能夠通過lookup助手到if助手的結果。

不幸的是,Handlebars沒有用於連接字符串的內置幫助器。如果您的state對象的密鑰必須與您的問題相同,那麼您將需要創建一個可幫助您連接的助手。這樣的助手是相當簡單的,這裏是一個我想出了:

Handlebars.registerHelper('concat', function() { 
    return Array.prototype.slice.call(arguments, 0, -1).join(''); 
}); 

使用這個幫手,我們可以按如下方法訪問您的state對象的鍵:

{{#if (lookup @root.state (concat 'action-' @key '-collapsed'))}} 

{{/if}} 

僅供參考,我已經創建了一個示例fiddle,它使用上述兩種方法來解決此問題。

+0

謝謝。該解決方案確實使用'lookup'並在狀態對象中使用相同的密鑰。 – Rinux