Переменная в имени сеттера ORM EntitySave - PullRequest
1 голос
/ 16 января 2012

Я пытаюсь перебрать некоторые значения для вставки данных в БД с помощью ColdFusion ORM.

У меня проблемы с правильным синтаксисом.Вот пример того, что я пытаюсь сделать:

    <cfscript>

        var tn = 'CompanyName';

        transaction{

            newComp = EntityNew("company");

                newComp.set & tn &('ABC Comp');

            EntitySave(newComp);                                                

        }               

    </cfscript>

Для простоты этого вопроса я просто использую одну переменную.Фактический код перебирает массив данных, но если я могу просто выяснить, как это сделать с помощью переменной, я могу справиться с остальными.

Я пробовал несколько способов сделать это, но я не могу получитьсинтаксис правильный.

Возможно ли это?

Любая помощь будет отличной.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Вы можете избежать оценки, используя тег cfinvoke:

<cfset tn = "CompanyName">
<cftransaction>
<cfset newComp = EntityNew("company")>
<cfinvoke component="#newComp#" method="set#tn#">
      <cfinvokeargument name="#tn#" value="ABC Corp">
</cfinvoke>
</cftransaction>

Еще немного о его использовании в примере здесь

Следующая версия ColdFusion будетпринести вызвать к сценарию.

1 голос
/ 16 января 2012

Попробуйте

evaluate( 'newComp.set#tn#( "ABC Comp" )' );
0 голосов
/ 17 января 2012

Возможно, напишите в вашей модели метод, который делает принятие «динамического» состояния частью и частью его API, например:

component {
  function setState( Struct state ){
    var key = 0;
    for ( key in state )
    {
      variables[ key ] = state[ key ];
    }
  }
}

Затем в своем коде вызова передайте ему структуру:

newComp = EntityNew( 'Company' );
state = {};
state[ tn ] = 'ABC Comp';
newComp.setState( state );

Мы обычно делаем это в наших конструкторах, что позволяет нам делать вещи за один раз, подобно Groovy и некоторым другим языкам:

var chuck = new Contact( { firstName = "Chuck", lastName = "Taylor" }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...