2010-10-13 76 views
0

我有两个使用绑定和cfc的cfselect框。一个是国家。选择一个国家,第二个cfselect(县)即时填充。ColdFusion和Ajax:如何在绑定选择框中获得空行?

在使用bind属性进行此操作之前,我依赖于queryPostion =“below”属性,如下所示,基本上将空行插入选项框。我现在想为州和县的选择框做同样的事情,因为我希望在每个选项中都有“”值(或“ALL”值作为选项,但是queryPostion不再有效。不知道的一个变通

//original... leaves a blank option: 
    <cfselect enabled="No" name="search_state" multiple="no" query="get_States" value="StateUSAbb" display="StateName" queryPosition="below"> 
         <option></option> 
    </cfselect> 

    //now, w/bind, doesn't work: 


    <cfselect bind="cfc:states.getStates()" bindonload="true" name="search_state" 
        value="StateUSAbb" display="StateName">  
    </cfselect> 

    <cfselect bind="cfc:states.getCounties({search_state})" bindonload="true" name="search_county" value="FIPS_County" display="CountyName" > 
    </cfselect> 

UPDATE 解决方案两个查询:

 SELECT DISTINCT tblLoc.StateUSAbb, lkuState.StateName 
     FROM lkuState INNER JOIN tblLoc ON lkuState.FIPS_State = tblLoc.FIPS_State 
     WHERE (lkuState.StateName <> 'New Brunswick') 
     UNION 
     SELECT '' AS StateUSAbb, '' AS StateName 
     FROM lkuState 
     ORDER BY StateName 

SELECT '' AS FIPS_COUNTY, '' as CountyName 
     FROM lkuCnty 
     UNION 
     SELECT FIPS_County, CountyName 
     FROM lkuCnty 
     WHERE StateAbb = '#ARGUMENTS.stateabb#' 
     ORDER BY CountyName 
+0

@stuttsdc - 你是第一次运行“数据”查询的2个版本吗?即验证sql可以首先运行 – Leigh 2010-10-13 18:22:56

+0

@Leigh ...尝试。我很确定这是一个与我的SQL有关的sytax问题。当我尝试运行“状态”框中的sql时,出现错误:“SELECT语句包含保留字或参数名拼写错误或缺少,或标点符号不正确。” – stuttsdc 2010-10-13 18:48:20

+0

@stuttsdc - 一次尝试一次,以便确定问题对象。在MySQL中运行基本的JOIN。如果有效,请添加其他部分(ORDER BY子句,然后是UNION)。 – Leigh 2010-10-13 19:02:43

回答

0

更新:没关系。看起来像我在回复时已经提出了相同的建议;-)

AFAIK,没有内置选项用于在绑定选择列表中创建空元素。至少不会与CF8。

由于绑定会替换列表内容,因此您需要将空选项添加到查询结果中。一种技术是通过UNION将空选项添加到查询结果中。

根据列表值,无论是

SELECT 0 AS SortOrder, '' AS StateUSAbb, '--- ALL ---' AS StateName 
UNION ALL 
SELECT 1, StateUSAbb, StateName 
FROM YourTable 
WHERE (some condition ...) 
ORDER BY SortOrder ASC 

...或可能

SELECT '' AS StateUSAbb, '--- ALL ---' AS StateName 
UNION ALL 
SELECT StateUSAbb, StateName 
FROM YourTable 
WHERE (some condition ...) 
ORDER BY StateUSAbb 

UPDATE 作为一个兴趣点,使用UNION和联盟之间的区别ALL是UNION删除重复项。 UNION ALL不。由于UNION查询稍微昂贵一些,因此我只在需要时才使用它。


+0

谢谢你们..这是我引导自己的地方,但似乎无法让它点击。 – stuttsdc 2010-10-13 18:08:51

2

我已经想通了最简单的方法是插入一个空白(或占位符)数据行在你的cfc中查询。例如:

select "0" as id, "Choose...." as value 
union 
select id, value from tableName 
1

这将在states.cfc getCounties()函数中处理。这需要返回空白记录。如果您需要更多帮助,请在此处张贴。

+0

会在上面发布整个cfc,谢谢 – stuttsdc 2010-10-13 18:10:20

0

FYI绑定表达式可以绑定到返回CF9中的实体数组的函数。

在这种情况下,ArrayPrepend()将与Q/Q/UNION ALL一样工作。

+0

你是什么意思的实体?它与早期版本不同,只能使用数组而不是查询? – Leigh 2010-10-13 23:15:00

+0

当你将它绑定到一个cfc方法时,该方法可以返回一个实体数组(persistence = true CF9的orm实体),并且AJAX管道仍然可以工作。 – Henry 2010-10-13 23:56:16

+0

很酷。我不知道。 – Leigh 2010-10-14 01:35:55