cfselect не привязывается к cfc

Я новичок в более новых версиях ColdFusion, и у меня возникают проблемы с простой привязкой данных к cfselect. Я сделал все возможное, чтобы тщательно изучить его, и я даже вернулся к учебнику и по существу продублировал пример кода в тестовом файле, но все равно получаю ту же ошибку.

Я пытаюсь создать обычную ситуацию, когда есть 2 cfselects, а второй зависит от первого, но на данный момент я даже не могу заставить работать первый. Возвращаемая ошибка:

«Ошибка привязки для поля выбора Species_id, значение привязки не является двумерным массивом или допустимым сериализованным запросом»

Заранее благодарю за любую помощь. Вот код:

<cfcomponent>
    <cffunction name="getSpecies" access="remote" returnType="array">
    <cfset var rsData = "">
    <cfset var myReturn=ArrayNew(2)>
    <cfset var i=0>
      <cfstoredproc datasource="#application.dsn#" procedure="up_get_Species">
            <cfprocresult name="DataResults">
        </cfstoredproc>
    <cfloop query="DataResults">
        <cfset myReturn[rsData.currentRow][1]=rsData.Species_id>
        <cfset myReturn[rsData.currentRow][2]=rsData.Species>
    </cfloop>
    <cfreturn myReturn>
    </cffunction>
</cfcomponent>

<html>
<head>
    <title>CFSelect Example</title>
</head> 
<body>
<h1>Sandbox for getting cfselect bind working</h1>
<cfform name="form1">
Wood Type
<br>
<cfselect name="Species_id" bind="office.cfc:data.getspecies()"
    bindOnLoad = "true" />
</cfform>
</body>
</html>

person user2271384    schedule 11.04.2013    source источник
comment
Пара точек. Сначала вы должны изменить переменную DataResults в файле cfc. Во-вторых, если вы еще этого не сделали, убедитесь, что ваш метод cfc возвращает ожидаемый результат, вызвав его из coldfusion, прежде чем пытаться использовать его в привязке. Это упрощает устранение неполадок.   -  person Dan Bracuk    schedule 12.04.2013


Ответы (1)


Похоже, ваш синтаксис привязки отключен. Выражение привязки должно начинаться с type: привязки (cfc, url, javascript). Поскольку вы привязываетесь к компоненту, вы должны предварять его "cfc:", т.е.

     bind="cfc:path.to.yourComponentName.yourFunctionName()"

При этом более поздние версии CF поддерживают привязку к запросу, что упрощает привязку. Просто измените функцию returnType на query.

<cffunction name="getSpecies" access="remote" returnType="query">
     <!--- Be sure to Local scope all variables, including query names --->
     <cfstoredproc datasource="#application.dsn#" procedure="up_get_Species">
          <cfprocresult name="Local.DataResults">
     </cfstoredproc>

     <cfreturn Local.DataResults >
</cffunction>

Затем укажите атрибуты display и value в списке выбора.

<cfselect name="service" 
          bind="cfc:office.cfc:data.getSpecies()"
          display="Species"
          value="Species_id" ...>
person Leigh    schedule 11.04.2013