如何或何时在coldfusion中调用Super的init方法

时间:2016-11-23 13:31:28

标签: coldfusion coldfusion-9

我的组件类似于扩展components.pdf的组件

<cfcomponent extends="components.pdf" >
 <cffunction name="generate" access="public" >
  <cfscript>
   config = {
    .....
   };
   oWriter = CreateObject("component","writers.pdf").init( config );
  </cfscript>
 </cffunction>
</cfcomponent>

使用某些设置在initilize oWriter组件中的generate函数内。

调用oWriter组件的init方法后,我认为它包含我设置的配置选项。但是当我在oWriter方法中转储配置结构时,我得到了components.pdf中设置的设置/选项

这些设置/配置如何覆盖?

1 个答案:

答案 0 :(得分:0)

让我们调用您在上面定义的组件:PdfGen。您获得的行为是因为变量config仅在PdfGen的上下文中定义。因此,只要generate()函数处于活动状态,config就作为oWriter对象的属性存在。生成函数的结束标记运行后,config将不再作为oWriter或任何其他writer.pdf对象的字段存在。

您可以按如下方式获得所需的结果。将上面的组件(我称之为PdfGen)重新定义为:

SELECT 
    PRHeader.PrId, Count1 'Number Of Actions', Count2 timeInHandoverExternal
FROM 
    PRHeader 
JOIN 
    (SELECT COUNT (ActionId) Count1 
     FROM PRAction 
     GROUP BY PrId) A ON A.PrId = PRHeader.prid
LEFT JOIN 
    (SELECT 
         COUNT(PRStatusChangesLog.EffectiveMinutes) Count2, PrId, StatusId  
     FROM 
         PRStatusChangesLog 
     WHERE 
         StatusId = 4100 
     GROUP BY 
         PrId, StatusId) B ON B.PrId = PRHeader.PrId 
WHERE 
    DATEDIFF(mm, prheader.ClosedDate, getdate()) = 1  
    AND (PRHeader.siteId = 74 )
    AND prheader.PRTypeId IN (17,19) 
    AND PRHeader.tmpStatusId <> 6010  

然后沿着以下几行定义 writers.pdf

<cfcomponent extends="components.pdf" >
 <cffunction name="generate" access="public" returntype="any">
  <cfscript>
   config = {
    configKey = "some value"
   };
   oWriter = CreateObject("component","writers.pdf").init(config);
   return oWriter;
  </cfscript>
 </cffunction>
</cfcomponent>

用于测试此内容的CFM页面将类似于:

<cfcomponent>

<!--- Component instance variable. Every writers.pdf object (defined through init) will have it--->
<cfset config = "">

<cffunction name="init" access="public" returntype="any">
<cfargument name="configArg" >
<cfset config = arguments.configArg>
<cfreturn this>
</cffunction>

<cffunction name="getConfig" access="public" returntype="any">
<cfreturn config >
</cffunction>
</cfcomponent>