2014-02-21 3 views
3

Я работаю с ColdFusion Server версии 8,0,0,176276.Содержимое ColdFusion cfautosuggestvalue пустое, хотя хороший массив возвращается из cfc

Я пытаюсь добавить поле формы, предложенное авторами, с асинхронной совокупностью через cfc. Я использую http://www.forta.com/blog/index.cfm/2007/5/31/coldfusion-ajax-tutorial-1-autosuggest для вдохновения и синтаксиса.

Поле autosuggest отлично работает, если я использую статический запрос (как в первом примере Форты). Cfc успешно возвращает массив, когда он не используется в поле формы.

Но когда я использую cfc для autosuggest, никаких предложений не предусмотрено.

Я не могу видеть содержимое поля ввода с «источником просмотра», но если я «проверяю элемент» в поле в Chrome, я вижу div с классом = «yui-ac-bd», и под ним. Элементы списка в ul пусты при использовании cfc, тогда как при использовании статического запроса элементы списка содержат элементы массива.

Вот код на моей странице:

<cfform> 
<cfinput type="text" name="JobP"  
    autosuggest="cfc:autosuggest.AutoSuggest({cfautosuggestvalue})"> 
</cfform> 

И вот autosuggest.cfc:

<cfcomponent output="false" > 
<cffunction name="AutoSuggest" access="remote" returntype="array"> 
<cfargument name="ObjectType" required="false" default="JOBP"> 

<cfset var result=ArrayNew(1)> 

<cfquery name="Objects" datasource="UC4MP"> 
SELECT oh_name 
FROM uc4.oh 
WHERE oh_otype = '#ObjectType#' 
AND oh_deleteflag = 0 
AND oh_lastdate > sysdate - 90 
AND oh_client = 1000 
and oh_name like 'A%' 
ORDER BY oh_name 
</cfquery> 

<cfloop query="Objects"> 
    <cfset ArrayAppend(result,oh_name)> 
</cfloop> 

<cfreturn result> 

Если я ставлю следующий код на моей странице, то он выводит массив с требуемым содержанием:

<cfinvoke component="autosuggest" method="AutoSuggest" returnVariable="result"> 
cfdump var="#result#"> 

Я пока не использую jQuery; большинство моих результатов Google для автозахвата CF связаны с jQuery, и я не смог пробраться через них в связи с моей проблемой. На всякий случай это будет ваше предложение.

+1

Причина, по которой большинство из них предлагает использовать jquery, заключается в том, что [CF-материал имеет много причуд] ​​(http://stackoverflow.com/a/19983983/104223). Неизменно вам нужно настроить встроенный материал и тратить много времени на то, чтобы настроить старые библиотеки ajax, встроенные в CF. Запуск w/JQuery с самого начала позволяет сэкономить много времени. Он широко используется, тестирование намного проще для обновления. Сказав это, вы 1) Проверьте свой CFC самостоятельно в браузере? 2) Вы [включили CF Ajax Debugger] (http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-8000.html)? – Leigh

+1

На основании приведенного выше кода вы хотите, чтобы ваш пользователь набрал «тип» и просмотрел список связанных имен? i.e набираю букву «J», и я вижу список, начинающийся с «A»? Это счетчик интуитивно понятен, используя «тип», и вход «имя» может быть лучшим подходом. – KobbyPemson

+0

Да, поэтому сначала вы должны сначала проверить cfc. Обязательно проверьте его * с параметрами *, чтобы вы могли видеть, возвращает ли запрос ожидаемые результаты для введенных значений. – Leigh

ответ

0

Если я правильно помню, когда я это делал несколько лет назад, мне пришлось создать виртуальный каталог в Apacahe и установить разрешения с использованием следующих директив. Вы можете применить то же самое к IIS, если работаете в этой среде. Это должно помочь вам.

Alias /CFIDE "/opt/coldfusion9/wwwroot/CFIDE" 
<Directory "/opt/coldfusion9/wwwroot/CFIDE"> 
allow from all 
Options FollowSymLinks 

С тех пор я использую javascript типа headhead из bootstrap 2. Намного проще и проще в стилистике. Вы все равно можете использовать свой cfc для вызова данных, и я включаю код для его очистки для typehead.

<cfinvoke component="autosuggest" method="AutoSuggest" returnVariable="result"> 
<cfset mylist = ArrayToList(result, ",")> 
<cfset mylist=ValueList(ShowKey.keyword)> 
<cfset mylist = jSStringFormat(#mylist#)> 


<input name="keyword" id="keyword" type="text" data-provide="typeahead" data-items="10" data-source='["<cfoutput>#replace(mylist,',','","','ALL')#</cfoutput>"]'/> 
1

Благодарим всех вас за советы! Я не знал, был отдельный Аякса отладчик, выход которого сразу же сделал проблему разъясняя:

info:http: Invoking CFC: /rd/autosuggest.cfc , function: AutoSuggest , 
arguments: {"ObjectType":"A"} 

Моими аргументы в отношении ХФА не включают автозаполнение самого, поэтому строку, переданную в поле ввода толкуется как «ObjectType» (первый аргумент) и используется в запросе. Поскольку нет записей, где oh_otype = 'A', результат всегда был пустым.

Я обновил аргументы моего Cfc к

<cfargument name="ObjectType" required="yes" default="JOBP"> 
<cfargument name="autosuggest" required="yes"> 

и молитвам к

<cfinput type="text" name="JobP" 
    autosuggest="cfc:autosuggest.AutoSuggest('JOBP',{cfautosuggestvalue})"> 

... теперь работает.

 Смежные вопросы

  • Нет связанных вопросов^_^