在处理一些遗留代码时,我们遇到了一个相当烦人的情况。我们正在循环一个带有<cfoutput query="x">
标签的查询。该查询有一个名为“url”的列。在该循环中,我们需要检查 url 范围内是否存在键。由于 CF 优先考虑查询中的内容而不是一般页面范围,因此我不能使用 a structKeyExists(url,"key")
,因为此时就 CF 而言, url 是一个字符串,其值来自查询的当前行。
如何突破查询范围并检查我的 url 中的内容?
作为临时我们使用 isDefined("url.key"),但我仍然想知道是否有办法突破查询范围。
如果没有几个小时的工作来跟踪更改对它的所有引用,也无法真正更改列,甚至查询中的列名,因此我们将尽可能避免这种情况。
编辑:对于如何设置此代码以及为什么简单的解决方案不适用似乎有些混乱。我很难给出一个完整的例子,但我会尽力澄清情况。
对于以下示例,有许多页面可以算作“pageA”。改变事情的运作方式就需要改变范围和时间投资,而这在分配的时间内不会发生。
PageA 使用名为 url 的列之一运行查询,然后通过 cfoutput 启动输出循环,在该循环内包含 PageB。一个 PageA 在 URL 范围内的变量可能与另一个 PageA 不同,实际上它们是相同的,但可能命名不同(varID=x 在一种情况下 vid=x 在另一种情况下)。在 PageB 内部,我需要使用该 url 范围内的值,因此我想遍历不同的可能名称(如果 url 中存在键“varID”,则使用它,否则使用“vid”)。
这就是为什么我想“穿透”查询范围以获取 url 结构,而不是查询中的 url 列。任何其他方法似乎都需要修改许多 PageAs。
所以问题不是如何具体解决这个问题,因为有很多方法可以做到,我真的很想避免它们,因为它们都会在实现和测试中增加大量时间。问题仍然存在,如果 url 作为查询列存在并且您在查询范围内,是否有办法将 url 范围作为变量访问。