2009-10-13 4 views
0

Je voudrais pouvoir lier une série de 3 boutons pour basculer 3 valeurs booléennes sur une entrée de message de base de données. Les entrées de base de données booléennes sont lues | non lu, en action | en attente, referral | message et l'entrée de message a la clé unique "messageID". Je veux que les boutons affichent les valeurs de début d'enregistrement (que je suppose être bindonload = "true").Comment lier un contrôle de bouton à un cfc pour basculer une valeur de base de données booléenne

J'ai boité vers

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

et dans le 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> 

Cela me fait un bout de chemin là-bas, dans la mesure où elle permet de basculer l'étiquette du bouton, mais je suis roussi sur la façon de ramasser les valeurs initiales db pour afficher l'état initial.

De même, existe-t-il un moyen de transmettre d'autres variables dans l'instruction de liaison sans utiliser de champs masqués et le format control @ none, par ex. Je devrai passer le messageID pour que je puisse mettre à jour le bon enregistrement. Je n'aurais pas mis l'entrée switchName si je savais comment passer simplement la variable switchName d'une manière plus grande.

Un grand merci pour toute lumière que vous pouvez jeter?

Répondre

0

Cela a aidé Henry.

Je l'ai eu à travailler, mais il se sent un peu kludgy ...

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

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

S'il y a un moyen Slicker s'il vous plaît laissez-moi savoir.

1

Que diriez-vous ...

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

ou bien:

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

et dans votre yourJSFunc, utilisez tout ce qui est JS var dont vous avez besoin.

Questions connexes