如果我使用access="remote“来绑定一个cfselect到一个cfc,那么我就失去了使用Init()构造函数的能力。
<cfselect name="CityID" bind="cfc:Components.City.View1({StateID})" value="CityID" display="CityName" bindonload="yes" />
我习惯于在实例化组件时将数据源名称传递给Init函数,如下所示:
<cfcomponent>
<cffunction name="Init">
<cfargument name="DS">
<cfset Variables.Instance.DS = arguments.DS>
<cfreturn This>
</cffunction>
<cffunction name="View1">
<cfset var qry = "">
<cfquery name="qry" datasource="#Variables.Instance.DS.Datasource#">
SELECT *
FROM Table
</cfquery>
<cfreturn qry>
</cffunction>
</cfcomponent>
发布于 2009-05-24 12:44:02
Phillip,我在这个场景中通常做的是:
onApplicationStart:
<cffunction name="onApplicationStart">
<cfset application.dsn = "myDSN" />
<cfset application.cityFinder = createObject("component", "Components.City").init(application.dsn) />
</cffunction>
和远程代理CFC:
<cfcomponent displayName="CityFinderProxy">
<cffunction name="View1">
<cfargument name="StateId" />
<cfreturn application.cityFinder.View1(argumentCollection=arguments) />
</cffunction>
</cfcomponent>
请注意,为简洁起见,我省略了许多最佳实践(即指定参数类型、必需等)……所以,不要只是复制和粘贴这个例子。我只是想说明一下这个想法。
发布于 2009-05-24 05:29:23
问题到底是什么?
将CFC设置为remote基本上就是让它成为一个web服务,所以我猜这就是为什么你不会有init()构造函数的原因。
您可以很容易地在application.cfc文件的onApplicationStart部分创建的应用程序/会话变量中设置数据源名称。
发布于 2009-05-24 05:52:43
您可能不想创建自己的远程init函数来调用您无法访问的函数,这是有原因的吗?
也许那样做会很痛苦..只是发人深省而已。
https://stackoverflow.com/questions/903037
复制相似问题