比方說,我有兩個項目的對象:把手訪問變量動態
state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }
在車把上,我遍歷另一個對象,其中鍵與foo
和bar
對應。
我想訪問對象以動態的方式顯示上面,像這樣:
{{#if @root.state['action-' @key '-collapsed']}}
這是可以實現的,最好不使用自定義的助手?
比方說,我有兩個項目的對象:把手訪問變量動態
state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }
在車把上,我遍歷另一個對象,其中鍵與foo
和bar
對應。
我想訪問對象以動態的方式顯示上面,像這樣:
{{#if @root.state['action-' @key '-collapsed']}}
這是可以實現的,最好不使用自定義的助手?
您將使用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,它使用上述兩種方法來解決此問題。
謝謝。該解決方案確實使用'lookup'並在狀態對象中使用相同的密鑰。 – Rinux