Come posso associare un controllo pulsante a una CFC per attivare o disattivare un valore base di dati booleano

StackOverflow https://stackoverflow.com/questions/1558731

  •  21-09-2019
  •  | 
  •  

Domanda

Vorrei in grado di legare una serie di 3 pulsanti per commutare 3 valori booleani su una voce di messaggio di base di dati. Le voci del database booleani sono già letto | letto, azionato | in attesa, il rinvio | messaggio e la voce di messaggio ha il "messageID" unico tasto. Voglio che i pulsanti per visualizzare i valori di partenza dei record (che presumo sia bindonload = "true").

Ho zoppicando verso

<cfform>
<cfinput type="hidden" name="switchName" value="read"> 
<cfinput type="button" bind="cfc:cfcs.messages.toggle({toggle@click},{switchName@none})" name="toggleRead" value="Read" bindonload="true">
</cfform>

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

Questo mi fa un po 'di strada lì, nella misura in cui si alterna l'etichetta del pulsante, ma sto foxed su come raccogliere i valori db iniziali per visualizzare lo stato iniziale.

Inoltre è ci un modo per passare altre variabili nell'istruzione legano senza l'utilizzo di campi nascosti e il formato di controllo @ nessuno, per esempio Ho bisogno di passare nel messageID in modo da poter aggiornare il record corretto. Non avrei messo in ingresso switchName se sapessi come passare semplicemente la variabile switchName in modo beter.

Molte grazie per qualsiasi luce si può gettare?

È stato utile?

Soluzione 2

che ha contribuito a Henry.

ho preso a lavorare, se ci si sente un po 'kludgy ...

<cfform>
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{toggle1@click},'referral', 'Referral', 'Message')" name="toggle1" value="" bindonload="YES">
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{toggle2@click},'viewed', 'Read', 'Unread')" name="toggle2" value="" bindonload="YES">
<cfinput type="button" STYLE="width: 80px; height: 22px;" bind="cfc:messageProcess.togglebool('#application.dsn#', '#url.messageID#',{toggle3@click},'actioned', 'Actioned', 'Pending')" name="toggle3" value="" bindonload="YES">
</cfform>

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

Se c'è un modo impermeabile fatemelo sapere.

Altri suggerimenti

Che ne dici di ...

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

o, in alternativa:

<cfajaxproxy bind="javascript:yourJSFunc({toggle@click})">

e nel tuo yourJSFunc, utilizzare qualsiasi JS di cui avete bisogno. Var

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top