Передача cfquery в функцию cfc из атрибута привязки элемента

У меня есть функция cfc, которая принимает аргумент типа запроса (с целью выполнения запроса запроса). Я могу успешно вызвать функцию, используя <cfinvoke>. Однако то, что я действительно хочу сделать, это вызвать функцию из скрытого атрибута привязки <cfinput>, используя bind="cfc:cfcname.somefunction(queryVar)", и этот код не работает. Видимой ошибки нет, но не похоже, чтобы моя функция когда-либо вызывалась — у меня там есть cflog. [Причина привязки на самом деле не имеет отношения к моему вопросу, но это потому, что мне нужно, чтобы вызов функции реагировал на другой элемент управления в форме - я выделил все это из своего вопроса]

Если я заменю queryVar какой-либо строковой переменной, функция будет вызвана нормально, но, очевидно, я не смогу получить нужные результаты без передачи запроса. Если я использую bind="cfc:cfcname.somefunction(#queryVar#)", я получаю

Сложный тип не может быть преобразован в простой тип

ошибка. Я искал любое задокументированное ограничение на передачу запроса (или любого сложного типа) в cfc из привязки, но не нашел подсказки.


person user14979990    schedule 10.01.2021    source источник
comment
Вы говорите, что функция должна реагировать на другой элемент управления на странице. Если вы имеете в виду пользовательский ввод, вы должны понимать, что к тому времени, когда это произойдет, не существует переменных холодного синтеза любого типа, кроме тех, которые находятся в области сеанса или приложения. Я думаю, вам стоит пересмотреть свой подход.   -  person Dan Bracuk    schedule 11.01.2021
comment
Дэн прав. Привязка форм ввода происходит на стороне клиента, а не сервера. В этот момент нет доступной переменной запроса ColdFusion. Если вы хотите, чтобы данные были доступны из вашего запроса для выбора пользователем, вам нужно будет перебрать свой запрос при создании страницы перед доставкой в ​​​​браузер пользователя. Эта ссылка может помочь вам понять.   -  person Miguel-F    schedule 11.01.2021
comment
Спасибо Дэн, Мигель.   -  person user14979990    schedule 11.01.2021
comment
Спасибо @DanBracuk, Мигель. Я уже прочитал ссылку, которую вы предоставили, Мигель, но спасибо. Однако переменные ColdFusion доступны во время выполнения страницы, поэтому теоретически представление cfqeury могло быть передано в выражение привязки — я полагаю, что мой подход сработал бы, если бы это была простая строковая переменная, из-за которой появляется сообщение об ошибке преобразование сложного типа более осмысленно. Я протестирую и отпишусь. (Я чувствую, что вы, ребята, могли пропустить мой комментарий о том, что использование привязки ортогонально вопросу.)   -  person user14979990    schedule 11.01.2021
comment
Пожалуйста, уточните свой вопрос, чтобы мы могли лучше помочь вам. Просмотр большего количества кода, который вы тестируете, вероятно, поможет. Объект запроса нельзя использовать в атрибуте привязки тега cfinput. Вот почему вы получаете ошибку.   -  person Miguel-F    schedule 12.01.2021
comment
Спасибо Мигель. Я сделаю это, как только у меня будет возможность запустить свой тест. Суть в том, что моя функция CFC принимает два параметра: значение другого поля в форме (отсюда привязка) и запрос — идея состоит в том, чтобы использовать значение поля для фильтрации данных запроса без выполнения запроса каждый раз. время изменения поля фильтра. Все комментарии и ответ @Bobmd ниже содержат части ответа и определенно помогли мне обдумать это, но в конечном итоге это может привести к тому, что он не поддерживается   -  person user14979990    schedule 13.01.2021


Ответы (1)


Вы можете использовать привязку для отправки введенных пользователем данных на другую страницу для обработки, а затем отправить обратно результаты. Например, если вы используете привязку к полю даты рождения. Когда пользователь выбирает дату своего рождения, вы можете отправить эту дату на страницу CFC или CFM, чтобы она выполнила математику #DateDiff('yyyy',birthdate,Now())# и вернула результат, которому будет сколько лет пользователь есть.

Но, насколько мне известно, вы не можете отправить запрос на другую страницу через функцию привязки. Однако вы можете снова запустить запрос на другой странице и вернуть результаты.

Или, возможно, загляните в JQuery для дальнейшей обработки после загрузки страницы.

person Bobmd    schedule 11.01.2021
comment
Спасибо! Хотя конечная цель состоит в том, чтобы отправить запрос в CFC (другая страница, как вы назвали это выше), проблема лежит выше по течению: материал, написанный в выражении привязки, должен иметь возможность добраться до самой первой страницы (в частности, в javascript CF пишет для обработки связанных с привязкой событий). Итак, CF не может отправить его в CFC, это правда, но это потому, что его там нет для отправки. Я пытаюсь понять, почему - как говорит @MIguel-F в своем последнем комментарии, может быть, так оно и есть. У меня не было времени протестировать и увидеть, как именно выглядит javascript, но я опубликую, как только сделаю это. - person user14979990; 13.01.2021
comment
Другой возможный обходной путь. Если вы хотите, чтобы запрос со страницы 1 был доступен на странице 2, вы можете сохранить результаты запроса в области действия, т.е. назовите запрос session.queryname. - person Bobmd; 14.01.2021