0

我正在为一个必须重新设计的 Coldfusion 网站而苦苦挣扎:

在我的 Jquery Mobile / Coldfusion8 站点上,用户应该能够从几个不同的页面登录(每个页面都有自己的登录表单 - 无法更改!)

当用户第一次进入 index.cfm 页面时,我正在运行:

 <!--- SESSION handler --->
 <cfif Session.loggedIn EQ "No">    
      <CFPARAM NAME="Attributes.Datasource">
      <CFPARAM NAME="Attributes.AdditionalText" DEFAULT="">
      ...
      <CFSET aform = "#CGI.SCRIPT_NAME#">
 </cfif>

这是登录例程的一部分,并设置所有参数和变量。我没有收到任何错误,所以一切都必须正常。该页面包含一个列表,其中一项是:

 <li>#Attributes.AdditonalText"</li>

和登录表单:

 <CFFORM ACTION="#aform#" NAME="LoginForm">

此外,当没有定义会话时,我将重定向到 index.cfm,因此所有用户都将最终访问此页面并获取他们的会话。

问题
当用户从 index.cfm 转到下一页时,Jquery Mobile 将此页面添加到 DOM(!)。但是在 index.cfm 上有效的相同参数/变量现在会产生错误(两者都未定义)。

我不明白这一点。Coldfusion 参数/变量不能在 DOM 规模上访问,所以我通过 Ajax 动态添加的任何东西,包括对这些参数/变量的引用也可以工作?

我有点迷失在这里做什么。Coldfusion新手,也是。

如果我的 index.cfm 中有此文本

这是#attributes.additionalText#

它有效,但如果我在第二个文件中有相同的片段,它被附加到 DOM,完全相同的片段返回 #attributes.additioanlText# 未定义...

问题:
为什么我的变量和属性在我动态添加到 DOM 的内容上无法访问或未定义?如何使它们在全局范围内可用?

感谢您提供一些线索!

4

2 回答 2

5
  1. ColdFusion 对 DOM 一无所知,因此更多地将其视为简单地返回内容,然后由浏览器加载或由 javascript 使用。

  2. 属性不是共享范围。据我所知,它甚至不是 CF 中的实际范围,而是一种约定(编辑:实际上是 customtags 中的范围),因此如果您在页面之间移动,则第 1 页上设置的任何属性值都不会在第 2 页上可用。您可以为此使用会话范围,但实际上看起来您只需要确保每个请求都命中此 IF 语句。执行此操作的两种主要方法是使用OnRequestStart,另一种是让所有请求通过 index.cfm 并在 url 上使用 action 属性指定要包含的代码、要命中的函数等。

于 2012-04-27T14:54:15.767 回答
1

您需要添加到 DOM 的任何内容都可以通过使用 ColdFusion 写出 jQuery 来填充您在呈现页面时想要的任何 DOM 对象。或者,您可以创建一个对 ColdFusion CFC 的 Ajax 服务调用,该 CFC 设置为直接接受传入的 http 调用并在 JSON 中返回您想要的任何值。

这里简单介绍一下如何采用第二种方法: Easy AJAX using ColdFusion, jQuery and CFCs

于 2012-04-27T15:18:55.580 回答