Como posso vincular um controle de botão a um cfc para alternar um valor booleano do banco de dados

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

  •  21-09-2019
  •  | 
  •  

Pergunta

Gostaria de vincular uma série de três botões para alternar três valores booleanos em uma entrada de mensagem do banco de dados.As entradas booleanas do banco de dados são lidas|não lidas, acionadas|pendentes, referência|mensagem e a entrada da mensagem possui a chave exclusiva "messageID".Quero que os botões exibam os valores iniciais do registro (que presumo ser bindonload = "true").

Eu manquei em direção

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

Isso me leva até lá, na medida em que alterna o rótulo do botão, mas estou surpreso em como escolher os valores iniciais do banco de dados para exibir o status inicial.

Também existe uma maneira de passar outras variáveis ​​na instrução bind sem usar campos ocultos e formato control@none, por exemplo.Precisarei passar o messageID para poder atualizar o registro correto.Eu não teria colocado a entrada switchName se soubesse como simplesmente passar a variável switchName de uma maneira melhor.

Muito obrigado por alguma luz que você possa lançar?

Foi útil?

Solução 2

Isso ajudou Henry.

Eu fiz funcionar, embora pareça um pouco desajeitado ...

<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 o 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 houver uma maneira mais inteligente, por favor me avise.

Outras dicas

Que tal...

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

ou alternativamente:

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

e em seu JSFunc, use qualquer JS var que você precisar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top