2010-10-13 75 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