2015-04-14 2 views
1

Я просматриваю запрос и хочу динамически установить имя ключа struct и его значение. Но я не могу заставить его работать, потому что он не интерпретирует динамическое значение правильно - он думает, что это фактическое имя ключа. Вот что я имею в видуКак установить динамическое имя ключа в структуре?

<cfloop query="rsSettings"> 
<cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()> 
<cfset APPLICATION.Config.Settings[rsSettings.CompanyID].#rsSettings.Name#" = rsSettings.SettingValue/> 
</cfloop> 

мне нужна #rsSettings.Name# часть будет значение имени хранится в этом, например, записей «MaxOrders»

Я пробовал ставить кавычки вокруг него вот так: <cfset APPLICATION.Config.Settings[rsSettings.CompanyID]."rsSettings.Name" = rsSettings.SettingValue/>, но это не сработает.

Что я могу сделать, чтобы принять динамическое имя ключа?

+2

'[rsSettings.CompanyID]' делает то, что вы хотите, так приковать их '[rsSettings.CompanyID] [rsSettings.Name]' – Antony

+0

Так как бы я установить значение '[rsSettings .CompanyID]. [RsSettings.Name] '? Я думал, что это создает другое измерение для структуры –

+3

' 'structs dont имеют размеры, у них есть глубина (я полагаю) (и в моем первом комментарии есть опечатка. Между двумя ключами не должно быть – Antony

ответ

3

Чтобы сделать динамические клавиши в строении, вам нужно следовать квадрату [] скобки нотации. Вы можете сделать это следующим образом:

<cfloop query="rsSettings"> 
    <cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()> 
    <cfset APPLICATION.Config.Settings[rsSettings.CompanyID][rsSettings.Name] = rsSettings.SettingValue/> 
</cfloop> 

Если у вас есть несколько настроек для компании (как уже упоминалось Джо), что вы получаете от rsSettings запроса, то в этом случае вам может понадобиться, чтобы проверить, если CompanyID уже существует в APPLICATION.Config.Settings. Как это:.

<cfloop query="rsSettings"> 
     <cfif NOT structKeyExists(APPLICATION.Config.Settings, rsSettings.CompanyID) > 
       <cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()> 
     </cfif> 
     <cfset APPLICATION.Config.Settings[rsSettings.CompanyID][rsSettings.Name] = rsSettings.SettingValue/> 
    </cfloop> 
+0

Как указал Джо, для каждого элемента в запросе 'rsSettings' вы создадите новую структуру, эффективно переписывая значения из последней итерации. –

+0

Эй, @ScottStroz, спасибо, что указали. Я обновил свой ответ, чтобы решить проблему. – Pankaj

+0

Проблема теперь в том, как настройки не будут обновляться в области приложения при их изменении. –