2009-10-13 40 views
0

我希望能夠綁定一系列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輸入。

非常感謝您可以放棄任何光線?

回答

0

那幫了亨利。

我得到它的工作,雖然它讓人感覺有點缺憾......

<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> 

如果有一個巧妙方式請讓我知道。

1

......怎麼

<cfinput type="button" bind="cfc:cfcs.messages.toggle({[email protected]}, #switchName#)" value="#initialValue#" bindonload="false"> 

或者:

<cfajaxproxy bind="javascript:yourJSFunc({[email protected]})"> 

,並在您yourJSFunc,使用JS變種的任何你需要的。

相關問題