CFCLIENT:Doc示例不起作用;无法正常工作?

时间:2015-08-17 18:56:19

标签: coldfusion coldfusion-11 cfclient

所以我意识到新的CF11移动功能已收到一些非常复杂的评论,但我想尝试一下,看看我是否可以使用它们进行一些非常简单的设备检测,但是我无法得到任何实际工作

例如,我正在查看cfclientsettings的文档,特别是在"设备检测"页面上的第一个示例中。标题。这是参考代码(我将其格式化了一点,以确保它在这里很容易阅读):

<cfClientSettings detectDevice=true /> 
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfset evalStr = "document.getElementById('canvas').innerHTML='" & cfclient.canvas & "'">
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null)">Show canvas support</button>

创建一个新的.cfm页面并添加此代码会在页面上生成文本和按钮,但单击该按钮会在Chrome中引发JS错误:&#34; Uncaught函数签名是invokeCFClientFunction(functionName [,arg1,arg2 ,arg3,...],successCallback,failureCallback)。 functionName,successCallback和failureCallback是必需的。如果您没有successCallback或failureCallback,则可以将null作为值传递。&#34;

好的,不是很好。所以我检查了一些更多的文档,并决定在invokeCFClientFunction()调用中添加另一个null参数来修复丢失的回调。这至少可以纠正JS错误,但现在点击按钮时什么也没发生。

所以经过一些更大的烦恼,我得到了以下代码,但仍然无效,但似乎更接近:

<cfClientSettings detectDevice=true />
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfscript>
            document.getElementById('canvas').innerHTML=cfclient.canvas;
        </cfscript>
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null,null)">Show canvas support</button>

因此,当您单击该按钮时,此代码将canvas元素的innerHTML设置为&#34; undefined&#34;。真棒。

老实说,我一直在尝试使用cfclient找到的每个例子,其中没有一个可以工作。我错过了一些秘密吗?我怀疑如果我没有创建一个移动项目&#39;在CFBuilder中,这个东西不起作用?如果这样那么愚蠢,他们就不会在文档中说明这一点。

我最终尝试做的只是使用cfclient进行一些基本的设备检测,并抓住浏览器/设备的宽度来进行一些基本的媒体查询样式检测,就像在&中一样#34;使用媒体查询&#34; cfclientsettings doc的部分。我只想获取宽度,然后根据它设置会话变量。

我在使用IIS的Win7机器设置上运行完全修补的CF11开发人员版本。欢迎任何和所有支持。

Adob​​e论坛上的交叉帖子:https://forums.adobe.com/thread/1929387

2 个答案:

答案 0 :(得分:1)

让我先说明我从未使用过cfclient这个答案,我只是转发我在网上找到的文档供其使用。这个评论太长了。

你说:

  

我有一种潜在的怀疑,如果我不在CFBuilder中创建一个“移动项目”,这个东西不起作用?如果是这样,那就太愚蠢了,他们并没有在文档中说明这一点。

我认为他们确实在文档中说明了这一点。这是我发现的。在Client-side CFML (for mobile development)文档的开头,它声明:

  

开始之前 - 要试用this document中提供的示例,您需要设置ColdFusion移动开发环境。请参阅Configuring the development environment

我不打算重复此处的所有信息,因为它相当实质,但配置开发环境页面提到您必须安装ColdFusion Server 11,安装ColdFusion Builder然后创建' ColdFusion Mobile Project'在Builder内帮助您。

但是,该页面还指出您可以通过执行Migrating existing projects中的“{3}}”下的步骤自动转换现有的ColdFusion项目,其中“将CF Mobile Nature”应用于ColdFusion Builder中的项目。 这可能是您遗失的部分。

我认为如果你仔细阅读我引用的文件,它可能会让你前进。此处还有指向其Building Mobile Applications文档的链接,其中包含整个过程的概述。

答案 1 :(得分:1)

在我的键盘上猛击一下之后,我已经让cfclient范围工作了。

我终于在文档中找到了这个页面:Device Detection

乍一看,这个页面看起来几乎与cfclientsettings doc页面完全相同,即使有相同的代码示例。

但是,cfclientsettings doc使用这样的范围:

cfclient.canvas

Device Detection doc页面写如下:

cfclient.properties.canvas

动臂。当然这一切都花了。真是浪费时间。如果添加&#34; .properties&#34;所有cfclient作用域变量都可以正常工作。在那里。

我仍然不确定cfclientsettings doc是否完全错误,或者它是否在不同的上下文中引用它。我肯定会在这一点上添加评论。

(另外,在两个doc版本上,这个例子的JavaScript仍然失败,所以还有。)

希望这有助于想要进行简单的ColdFusion客户端设备检测的人。