如果x = true </cfloop>,将项目移动到<cfloop>中的第一个数组位置

时间:2012-03-17 00:42:57

标签: jquery arrays coldfusion

我有一个CFC通过AJAX执行查询,以获取要在我的页面上显示的图像信息/路径列表。在我的表中,我有一个布尔列main来指示图像是否是主图像,因此显示在所有其他图像之上。

由于我是通过AJAX访问查询结果,因此我需要创建一个数据数组,然后将其返回到我的javascript函数循环返回数据并构造<img>标记的页面。

如何让我的CFC或我的javascript循环识别main布尔值并将该图像移动到第一个位置以显示在我的页面上?

这是我的CFC:

<cfquery name="project_images">
  select path, title, alt, main from tbl_images where pid = #projects.pid#;
</cfquery>
  <cfloop query="project_images">
  <cfset imgStruct = structNew()>
  <cfset imgStruct["path"] = path>
  <cfset imgStruct["alt"] = alt>
  <cfset imgStruct["title"] = title>
  <cfset imgStruct["main"] = main>
  <cfset ArrayAppend(imgArray, imgStruct)>
</cfloop>
<cfset local.response["images"] = #imgArray#>
<cfreturn local.response>    

我的jQuery功能:

$('.project_class').click(function(e){
    e.preventDefault();
    var theclass = $(this).attr('id');
    var cat = 'planning';

    $.getJSON("../cfc/projects.cfc?returnFormat=json&method=getProjects",
        {"theclass":theclass, "cat":cat},
        function(response){
            $('#portfolio_item').html(response.html);
            var imageData = response.images;
            $.each(imageData, function(i, item) {
                $('#portfolio_item').append('<img src="..' + item.path + '" />');
            });
        });
});

1 个答案:

答案 0 :(得分:3)

一个选项是对SQL中的图像进行排序。使用CASE语句为main记录分配比其他记录更高的排序顺序。

   SELECT CASE WHEN main = 1 THEN 0 ELSE 1 END AS SortNum
          , path
          , title
          , alt
          , main 
   FROM  tbl_images 
   WHERE pid = <cfqueryparam value="#projects.pid#" cfsqltype="cf_sql_integer">
   ORDER BY SortNum

或者您可以检查循环中的main标记,并在标记为true时使用arrayPrepend而不是arrayAppend