Запутался в классах, экземплярах и методах в ColdFusion - PullRequest
3 голосов
/ 19 апреля 2011

Мой вопрос, вероятно, лучше всего иллюстрируется на примере.В javascript я привык делать что-то вроде этого:

// create a simple class
function myClass() {
  this.attr_example = "attribute";
}
myClass.prototype.do_something = function() {
  return "did something";
}

// create an instance of it, and modify as needed
var thing = new myClass();
thing.myMethod = function(arg) {
  return "myMethod stuff";
}

// ... so that this works as expected
console.log(thing.myMethod());
console.log(thing.do_something());
console.log(thing.attr_example);

Когда дело доходит до выполнения чего-то подобного в ColdFusion, я застреваю.Я постоянно чувствую, что хочу сделать что-то вроде этого:

<cfscript>
  // thing.cfc contains a normal cfcomponent definition with some methods
  var thing = createObject("component","Thing");
  function formattedcost() {
    return "#LSCurrencyFormat(this.cost)#";
  }
  thing.formattedcost = formattedcost;
</cfscript>
<cfoutput>
  #thing.formattedcost()#
</cfoutput>

Давайте предположим, что для этого вопроса нет смысла добавлять «formattedcost» в качестве метода в класс Thing, потому что это чисто презентационный,Предположим также, что простого использования #LSCurrencyFormat(thing.cost)# в тегах <cfoutput> недостаточно, потому что нам нужно, чтобы экземпляр Thing оценивался с помощью системы шаблонов (в данном случае это усы).Более того, я бы хотел избежать создания другого файла .cfc, просто чтобы расширить класс Thing для добавления нескольких методов.

Что я могу сделать?Возможен ли такой стиль программирования в ColdFusion?

1 Ответ

7 голосов
/ 19 апреля 2011

Да, вы можете сделать это:

Thing.cfc

<cfcomponent output="false" accessors="true">
    <cfproperty name="cost" type="numeric">
    <cffunction name="init" output="false" access="public" 
        returntype="any" hint="Constructor">
        <cfargument name="cost" type="numeric" required="true"/>
        <cfset variables.instance = structNew()/>
        <cfset setCost(arguments.cost)>
        <cfreturn this/>
    </cffunction>
</cfcomponent>

test.cfm

<cfscript>
  // thing.cfc contains a normal cfcomponent definition with some methods
  thing = new Thing(725);
  function formattedcost() {
    return "#LSCurrencyFormat(getCost())#";
  }
  thing.formattedcost = formattedcost;
</cfscript>
<cfoutput>
  #thing.formattedcost()#
</cfoutput>

Результат

$725.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...