变量。 cfmodule内的作用域

时间:2019-09-12 17:50:11

标签: scope coldfusion cfc coldfusion-2016

我有一个名称为

的页面

summary.cfm

在里面:

 <cfinclude template="view/totals.cfm>

view / totals.cfm

在里面:

variables.grandTotalHTML = invoke("viewtotals, "doSummary", {...});

view / viewtotals.cfc

里面

<cfmodule template="summarytemplate.cfm" ...>
<!--- database is not passed in here --->

view / summarytemplate.cfm

我们里面有

param attributes.database = session.database;
...
databaseoverride = attributes.database;
...

<cfquery name="qData">
   SELECT *
   FROM [#variables.databaseoverride#]
   ...
</cfquery>

现在的问题

我不知道databaseoverride的来源。

  1. 全局页面请求范围吗?
  2. 它是否来自viewtotals.cfc中的变量?
  3. 不受范围限制的版本会覆盖它吗?

2 个答案:

答案 0 :(得分:2)

模块级别的变量作用域是模块本地的。模块中无作用域的变量在变量范围内。

此行

databaseoverride = attributes.database;

等同于

variables.databaseoverride = attributes.database;

所以要设置此处使用的值

<cfquery name="qData">
   SELECT *
   FROM [#variables.databaseoverride#]
   ...
</cfquery>

答案 1 :(得分:1)

(评论太久了)

只需详细说明Dan's answer

summary.cfm

  • 仅与包含的模板“ view / totals.cfm”共享VARIABLES范围

view / totals.cfm

  • 仅与父模板“ summary.cfm”共享VARIABLES范围

view / viewTotals.cfc

  • 它的VARIABLES作用域与任何调用模板(summary.cfm和view / totals.cfm)共享

  • 它的VARIABLES可通过CALLER作用域(该函数的localarguments作用域可访问到cfmodule )

view / summaryTemplate.cfm

  • 与任何人共享其VARIABLES范围。
  • 可以通过CALLER范围查看/修改父组件(viewTotals.cfc)中的任何范围。

REQUEST范围可被以上所有脚本访问。)