设置CFIF的问题

ace*_*man 0 coldfusion if-statement

<cfoutput query="allOutcomes" maxrows="10">
  <div class="galleryOutcome">
    <cfset thisPhoto = uploads.listPhotobyOutcomeID(#outcomeID#)>
    <h3>#lastname#, #firstname#</h3>
    <cfloop query="thisPhoto" >
      <cfif isdefined(filename)>

        <div class="gallerythumb">
          <a href="javascript: thumbExpand('#fileName#')"><img src="documents/uploads/PHOTOS/#filename#" alt="#filename#" border="0"  width="200"/></a>
        </div>

      <cfelse>
        <p> NO PHOTOS </p>
      </cfif>
    </cfloop>

  </div><div class="clear"></div><br /><br />
  <div onClick="javascript: thumbHide()" id="thumbexpand" style="display:none; left:670px;; height:0px; position:fixed; top:100px;">                    
  </div>

</cfoutput>
Run Code Online (Sandbox Code Playgroud)

我一直试图这样做,如果没有与他们相关的照片,#lastname#和#firstname#就不会显示.我尝试做一个cfif,检查文件名是否已定义,但似乎没有用.它返回一个错误说:

"函数IsDefined的参数1,现在(文件路径到图像),必须是语法上有效的变量名."

有小费吗?

谢谢

Lei*_*igh 16

首先,IsDefined期望变量的名称.当您省略引号或使用#符号时,您将传入变量.正确的语法是:

   <cfif IsDefined("variableName")>
Run Code Online (Sandbox Code Playgroud)

但是,查询列始终存在.所以无论如何它都不会产生正确的结果.相反,你应该测试是否FileExists.如果需要,请使用expandPath生成绝对物理路径

   <cfif FileExists( ExpandPath("/path/to/images/"& thisPhoto.fileName) )>
        it exists. do something ...
   <cfelse>
        no photo
   </cfif>
Run Code Online (Sandbox Code Playgroud)

编辑:作为评论中提到的Busches,通常structKeyExists是首选,IsDefined因为它的结果更精确.有些人可能会说它也有更好的表现.但在大多数情况下,任何差异都可以忽略不计.提高准确度是IMO更令人信服的原因.

<cfif structKeyExists( scopeOrStruct, "variableName")>
Run Code Online (Sandbox Code Playgroud)

  • 请查询范围!做你未来的自己一个忙.此外,对于StructKeyExists(),开始交易isDefined(). (2认同)