如何将一个按钮控件绑定到一个cfc来切换一个布尔数据库值
问题描述:
我希望能够绑定一系列3个按钮以在数据库消息条目上切换3个布尔值。布尔数据库条目被读取|未读取,执行|挂起|引用|消息,并且消息条目具有唯一密钥“messageID”。我希望按钮显示记录起始值(我认为这是bindonload =“true”)。如何将一个按钮控件绑定到一个cfc来切换一个布尔数据库值
我一瘸一拐地走向
<cfform>
<cfinput type="hidden" name="switchName" value="read">
<cfinput type="button" bind="cfc:cfcs.messages.toggle({[email protected]},{[email protected]})" name="toggleRead" value="Read" bindonload="true">
</cfform>
,并在CFC
<cffunction access="remote" name="toggle" output="false" returntype="any" >
<cfargument required="true" name="toggle" type="any"/>
<cfargument required="true" name="switchName" type="any"/>
<cfif toggle eq "Read">
<cfreturn "Unread">
<cfelseif toggle eq "Unread">
<cfreturn "Read">
</cfif>
</cffunction>
这让我有些路那里,只要它切换按钮标签,但我讨论如何获取初始db值以显示初始状态。
还有一种方法可以在不使用隐藏字段和控制@无格式的情况下传递bind语句中的其他变量,例如,我需要传入messageID才能更新正确的记录。如果我知道如何简单地通过switch方法传递switchName变量,那么我不会放入switchName输入。
非常感谢您可以放弃任何光线?
答
那帮了亨利。
我得到它的工作,虽然它让人感觉有点缺憾......
<cfform>
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{[email protected]},'referral', 'Referral', 'Message')" name="toggle1" value="" bindonload="YES">
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{[email protected]},'viewed', 'Read', 'Unread')" name="toggle2" value="" bindonload="YES">
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{[email protected]},'actioned', 'Actioned', 'Pending')" name="toggle3" value="" bindonload="YES">
</cfform>
和CFC
<cfcomponent>
<cffunction access="remote" name="togglebool" output="true" returntype="any" displayname="Toggle boolean value in message record" hint="Toggles boolean value in message record">
<cfargument required="true" name="dsn" type="string"/>
<cfargument required="true" name="messageID" type="numeric"/>
<cfargument required="true" name="buttonLabel" type="string"/>
<cfargument required="true" name="switchName" type="string"/>
<cfargument required="true" name="switchOnLabel" type="string"/>
<cfargument required="true" name="switchOffLabel" type="string"/>
<cfset var returnMessage = "" />
<cfset var temp = "" />
<cfquery datasource='#arguments.dsn#' name="getSwitchData">
SELECT #arguments.switchName#
FROM messages
WHERE messageID=<cfqueryparam value="#arguments.messageID#" cfsqltype="CF_SQL_INTEGER"/>
</cfquery>
<cfset temp="getswitchdata."&#switchName#>
<cfif #Evaluate(temp)# is 1>
<cfset returnMessage="#arguments.switchOnLabel#">
<cfelse>
<cfset returnMessage="#arguments.switchOffLabel#">
</cfif>
<cfif buttonLabel eq "">
<cfreturn returnMessage>
<cfelseif buttonLabel eq "#arguments.switchOffLabel#">
<cfquery datasource='#arguments.dsn#'>
UPDATE messages
SET #arguments.switchName#=1
WHERE messageID=<cfqueryparam value="#arguments.messageID#" cfsqltype="CF_SQL_INTEGER"/>
</cfquery>
<cfreturn "#arguments.switchOnLabel#">
<cfelseif buttonLabel eq "#arguments.switchOnLabel#">
<cfquery datasource='#arguments.dsn#'>
UPDATE messages
SET #arguments.switchName#=0
WHERE messageID=<cfqueryparam value="#arguments.messageID#" cfsqltype="CF_SQL_INTEGER"/>
</cfquery>
<cfreturn "#arguments.switchOffLabel#">
</cfif>
</cffunction>
如果有一个巧妙方式请让我知道。
答
......怎么
<cfinput type="button" bind="cfc:cfcs.messages.toggle({[email protected]}, #switchName#)" value="#initialValue#" bindonload="false">
或者:
<cfajaxproxy bind="javascript:yourJSFunc({[email protected]})">
,并在您yourJSFunc,使用JS变种的任何你需要的。