如何将一个按钮控件绑定到一个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变种的任何你需要的。