Как я могу привязать элемент управления кнопки к CFC, чтобы переключить логическое значение базы данных - PullRequest
0 голосов
/ 13 октября 2009

Я бы хотел иметь возможность связать серию из 3 кнопок для переключения 3 логических значений в записи сообщения базы данных. Записи логической базы данных считываются | непрочитанными, ожидают действий | ожидают, ссылка | сообщения, а запись сообщения имеет уникальный ключ «messageID». Я хочу, чтобы кнопки отображали начальные значения записи (я предполагаю, что bindonload = "true").

Я хромал в сторону

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

и в ХФК

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

Это дает мне некоторую возможность, поскольку переключает метку кнопки, но я не знаю, как подобрать начальные значения в БД для отображения исходного состояния.

Также есть способ передать другие переменные в операторе bind без использования скрытых полей и формата control @ none, например, Мне нужно будет передать messageID, чтобы я мог обновить правильную запись. Я не вставил бы вход switchName, если бы знал, как просто передать переменную switchName лучшим способом.

Большое спасибо за любой свет, который вы можете пролить?

Ответы [ 2 ]

1 голос
/ 13 октября 2009

Как насчет ...

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

или альтернативно:

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

и в вашем yourJSFunc используйте все необходимые JS-переменные.

0 голосов
/ 15 октября 2009

Это помогло Генри.

У меня все получилось, хотя и немного тупо ...

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

и КФК

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

Если есть более скользкий путь, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...