看起来标准的MVC approch(因为它与ColdFusion有关)是制作视图文件.cfm并在cfc内部执行最终处理视图的CFINCLUDE.
这会破坏cfc的面向对象吗?
这是否会导致CFML编译器每次都必须编译视图?
是否有充分的理由不使用GetContent方法自己创建视图文件cfc?
我正在使用以下脚本来调用CFC函数:
function loadQuery() {
$.get('QueryData.cfc',{},function(GetMyData){
$("#content").html(GetMyData)
})
return false
}
$(document).ready(function() {
$("#loadLink").click(loadQuery)
});
Run Code Online (Sandbox Code Playgroud)
这是我的HTML:
<a href="" id="loadLink">Load It</a>
<div id="content"></div>
Run Code Online (Sandbox Code Playgroud)
我打电话给以下CFC:
<cffunction name="GetMyData" access="public" returntype="query">
<cfargument name="RecordID" type="string" required="yes">
<cfset var RecordData = "">
<cfquery name="RecordData" datasource="MyDSN">
SELECT
foo.RecordID,
foo.RecordName
FROM
foo
WHERE
foo.RecordID = #ARGUMENTS.RecordID# ;
</cfquery>
<cfreturn RecordData>
Run Code Online (Sandbox Code Playgroud)
问题一是当我调用CFC时,CFC页面出现; 出现CFC描述(在询问管理员通行证后).我不想加载QueryData.cfc; 我想在QueryData.cfc中执行该函数.
第二个问题是我无法弄清楚将参数传递给CFC方法的语法.
我正在使用jQuery.post()调用Coldfusion组件(cfc).我需要返回的数字的整数或字符串表示形式,以便在URL中使用.
{"PAGE":"My Page Title","ID":19382}
or
{"PAGE":"My Page Title","ID":"19382"}
Run Code Online (Sandbox Code Playgroud)
相反,我得到的是小数:
{"PAGE":"My Page Title","ID":19382.0}
Run Code Online (Sandbox Code Playgroud)
需要更新以下HTML:
<a href="page.cfm?id=19382" id="pagelink">My Page Title</a>
Run Code Online (Sandbox Code Playgroud)
从概念上讲,我认为有多个答案:
1)我可以使用jQuery来获取小数点左边的数字.
2)我可以强制Coldfusion将数字作为字符串发送.
3)我可以生成整个链接服务器端,只需替换整个链接标记HTML(不是首选答案,但也许它是最好的)
有谁知道怎么做1或2?3更好吗?
相关的Javascript :(未优化)
$(".link").live('click', function () {
var $linkID, serviceUrl;
serviceUrl = "mycfc.cfc?method=getPage";
$linkID = $(this).attr("rel");
$.post(serviceUrl, { linkid: $linkID }, function (result) {
$('#pagelink').val(result.TITLE);
if (result.FMKEY.length) {
// NEED the ID number WITHOUT the .0 at the end
$('#pagelink').attr("href") = "page.cfm?id=" + result.ID;
$('#pagelink').text(result.TITLE);
}
}, "json");
});
Run Code Online (Sandbox Code Playgroud)
我的CFC:
<component output="no">
<cfsetting showdebugoutput="no">
<cffunction name="getPage" access="remote" returnFormat="JSON" …Run Code Online (Sandbox Code Playgroud) 我创建了一个javascript对象
var spanglist = {
one: q1,
two:q2,
three:q3,
four: q4};
Run Code Online (Sandbox Code Playgroud)
我创建了一个ajax jquery对象来将数据发送到CFC:
$.ajax({
url: 'gridly/components/pay.cfc',
type:"POST",
dataType:' json',
data: {method: "structFromJSobjt",
returnFormat:"json",
jsStruct: spanglist}
});
Run Code Online (Sandbox Code Playgroud)
在我的cfc中,我有以下简单的代码:
<cffunction name="structFromJSobj" access="remote" output="false" >
<cfargument name="jsStruct" required="true" default="" />
<!--- AT this point I would like to work with the data contained in the jsStruct object. I can't access the data regardless of the typeI make the cfargument --->
</cffunction>
Run Code Online (Sandbox Code Playgroud)
一旦有人在数据中,有人可以指导我使用数据.
我需要一种方法来从coldfusion中获取json返回并在jquery中显示它我可以显示第一个结果很好,但是如果更多那条记录回来我就被卡住这里是我的cfc
<cfquery name="users" datasource="#thedb#">
In this query I can get 1 record to 25 or even more results
</cfquery>
Run Code Online (Sandbox Code Playgroud)
这是我的jquery,不确定这是否是一个很好的方法,但....这就是我现在处理多个记录的方式.
<cfset var user = structNew()/>
<cfset thenumber = 1>
<cfloop query="users">
<cfset user["newrequestor#theNumber#"] = users.requestor/>
<cfset user["newrequestorusername#theNumber#"] = users.requestor_username/>
<cfset user["newrequestorphone#theNumber#"] = users.requestorphone/>
<cfset user["newrequestoremail#theNumber#"] = users.requestoremail/>
<cfset user["newthedate#theNumber#"] = users.thedate/>
<cfset user["newapproved#theNumber#"] = users.approved/>
<cfset user["newcomments#theNumber#"] = users.comments/>
<cfset user["newviewed#theNumber#"] = users.viewed/>
<cfset thenumber = thenumber + 1>
</cfloop>
<cfreturn user>
Run Code Online (Sandbox Code Playgroud)
CFC结束
这是我的jquery,我手动设置为抓取第一条记录...不确定如何循环以获取所有记录返回.
在这里,我将我的参数传递给cfc以获得我的结果.效果很好
thedata = instance.getSearch($("#therequestor").val(), $("#fromDate").val(), $("#toDate").val(), …Run Code Online (Sandbox Code Playgroud) 当我从cfc的远程方法返回一个字符串时.返回的字符串包含在一个奇怪的wddxpacket中:

我试图像这样关闭调试输出:
<cfsetting showDebugOutput="no">
Run Code Online (Sandbox Code Playgroud)
但它没有用.
在我被要求在冷融应用程序中查看一些奇怪的间歇性错误之前没有使用过coldfusion.
在阅读了范围后,我认为问题是因为我的cfc函数中没有变量使用var关键字,并且在各种函数中使用相同的变量名.因此,据我所知,变量在页面级别作用域,调用这些函数的不同线程将覆盖导致"奇怪"问题的变量.
我的问题是这样做的正确方法是什么?
<cfset var listCount = 0>
<cfquery name="qGetElementsByType" dbtype="query" maxrows="#arguments.num_to_return#">
SELECT elementId,
title, PIhtml, Rerhtml,
text, url, image, Rank, isPoll, pollId, subjectId
FROM arguments.element_query
WHERE <cfloop list="#arguments.element_type_id#" index="lcv">
<cfif listCount GT 0>
OR
</cfif>
subjectid = #lcv#
<cfset listCount = listCount + 1>
</cfloop>
</cfquery>
Run Code Online (Sandbox Code Playgroud)
是否var需要每个listCount变量设置,或者只是在最初宣布的时间将被添加?
我在应用程序的单个文件中有几个与逻辑相关的UDF.
问题是单个文件应该是CFC文件还是CFM文件?为什么?
我已经提到了几个链接,但是他们解释了如何实施解决方案.我只想知道哪一个更好 - CFM或CFC?
http://blog.adamcameron.me/2012/07/which-is-better-having-your-methods.html
谢谢你的帮助.
出于某种原因,一段在*.cfm页面上正常工作并且在a中工作正常的代码*.cfc现在在检测到错误时抛出错误.
错误是:
Element SQL is undefined in CFCATCH.
Run Code Online (Sandbox Code Playgroud)
这个抛出的代码块看起来像这样:
<cfcatch type="database">
<cfset errorMessage = "
<p>#cfcatch.message#</p>
<p>Please send the following to a developer:</p>
<p>#cfcatch.SQL#</p> <--- ERROR HERE
<p>#cfcatch.queryError#</p>
<p>#cfcatch.Where#</p>">
some other stuff
</cfcatch>
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
UPDATE
使用@BenKoshy建议,我修改了我的<cfcatch>陈述.
还记得KISS吗?保持简单愚蠢
使用他的方法,然后修改它,我得到的数据比我使用的更多,所以我选择了一个简单的版本,它的工作方式与广告一样.
<cfif isDefined("cfcatch.message")>
<cfset errorMessage = errorMessage & "<p>#cfcatch.message#</p>">
</cfif>
<cfif isDefined("cfcatch.SQL")>
<cfset errorMessage = errorMessage & "<p>Please send the following to a developer:</p><p>#cfcatch.SQL#</p>">
</cfif>
<cfif isDefined("cfcatch.QueryError")>
<cfset errorMessage = errorMessage & "<p>#cfcatch.queryError#</p>">
</cfif>
<cfif isDefined("cfcatch.Where")>
<cfset …Run Code Online (Sandbox Code Playgroud) 我有以下表连接在Microsoft SQL Server中正常运行并返回预期的结果.
SELECT d.id1, c.content_type
FROM Document2 AS d INNER JOIN
Content2 AS c ON d.content_id = c.content_id
WHERE (d.class_id = 1)
Run Code Online (Sandbox Code Playgroud)
但是,当我将语句放入ColdFusion CFC时,语句将不会执行,并且我没有得到任何返回.语法是否在CFC文件中更改?Microsoft SQL语法是否与ColdFusion CFC语法不同?或者我在这里错过了其他什么?
这是相关功能.如果我使用不是表连接的简单SQL语句,我可以使用此代码.但是,当我插入表连接语句时,什么都不会返回.
remote array function getcontent() {
var q = new com.adobe.coldfusion.query();
q.addParam( name="searchParam", value="#searchName#" );
q.setDatasource("Document");
q.setSQL("SELECT d.id1, c.content_type FROM Document2
AS d INNER JOIN
Content2 AS c ON d.content_id = c.content_id WHERE (d.class_id = 1)");
var data = q.execute().getResult();
var result = [];
for(var i=1; i<= data.recordCount; i++) {
arrayAppend(result, {"id"=data.d.id1[i], "Type"=data.c.content_type[i]}); …Run Code Online (Sandbox Code Playgroud) cfc ×10
coldfusion ×10
ajax ×3
jquery ×3
coldfusion-9 ×2
coldfusion-8 ×1
database ×1
javascript ×1
json ×1
scope ×1
sql ×1
sql-server ×1
wddx ×1