首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数Access=

函数Access=
EN

Stack Overflow用户
提问于 2009-05-24 03:55:15
回答 4查看 1.2K关注 0票数 4

如果我使用access="remote“来绑定一个cfselect到一个cfc,那么我就失去了使用Init()构造函数的能力。

代码语言:javascript
运行
复制
<cfselect name="CityID" bind="cfc:Components.City.View1({StateID})" value="CityID" display="CityName" bindonload="yes" />

我习惯于在实例化组件时将数据源名称传递给Init函数,如下所示:

代码语言:javascript
运行
复制
<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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-24 12:44:02

Phillip,我在这个场景中通常做的是:

  1. 在onApplicationStart中创建对象,并将其存储到应用程序作用域。在这里,您将使用您的数据源other settings.
  2. Create初始化一个远程代理CFC,它基本上是真实对象的存根,并将您的选择字段绑定到该CFC。

onApplicationStart:

代码语言:javascript
运行
复制
<cffunction name="onApplicationStart">
  <cfset application.dsn = "myDSN" />
  <cfset application.cityFinder = createObject("component", "Components.City").init(application.dsn) />
</cffunction>

和远程代理CFC:

代码语言:javascript
运行
复制
<cfcomponent displayName="CityFinderProxy">
  <cffunction name="View1">
    <cfargument name="StateId" />
    <cfreturn application.cityFinder.View1(argumentCollection=arguments) />
  </cffunction>
</cfcomponent>

请注意,为简洁起见,我省略了许多最佳实践(即指定参数类型、必需等)……所以,不要只是复制和粘贴这个例子。我只是想说明一下这个想法。

票数 5
EN

Stack Overflow用户

发布于 2009-05-24 05:29:23

问题到底是什么?

将CFC设置为remote基本上就是让它成为一个web服务,所以我猜这就是为什么你不会有init()构造函数的原因。

您可以很容易地在application.cfc文件的onApplicationStart部分创建的应用程序/会话变量中设置数据源名称。

票数 2
EN

Stack Overflow用户

发布于 2009-05-24 05:52:43

您可能不想创建自己的远程init函数来调用您无法访问的函数,这是有原因的吗?

也许那样做会很痛苦..只是发人深省而已。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/903037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档