变量。 cfmodule 内的作用域

Variables. scope inside of a cfmodule

我有一个名为

的页面

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>

现在提问

我不知道数据库覆盖是从哪里来的。

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

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

这一行

databaseoverride = attributes.database;

等同于

variables.databaseoverride = attributes.database;

设置此处使用的值也是如此

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

(评论太长)

只是详细说明 :

summary.cfm

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

view/totals.cfm

  • 仅与父模板共享 VARIABLES 作用域,"summary.cfm"

view/viewTotals.cfc

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

  • 它的 VARIABLES cfmodule 可访问 - 通过 CALLER 范围(函数的 localarguments 个范围)

view/summaryTemplate.cfm

  • 是否与任何人共享其VARIABLES范围。
  • 可以 view/modify 父组件 (viewTotals.cfc) 中的任何范围通过 CALLER 范围。

(上面的所有脚本都可以访问 REQUEST 作用域。)