Ошибка проверки атрибута для тега CFLOOP - PullRequest
0 голосов
/ 28 июня 2018

Я довольно новичок в этом языке Coldfusion, я сделал несколько уроков и просто следовал тому, что сказал мне курс, но я получаю ошибку в этом коде, кто-то может объяснить мне, почему?

<cfset carrinho=ArrayNew(1)>

<cfset carrinho[1]=StructNew()>
<cfset carrinho[1].nome="Camisa da Seleção Brasileira">
<cfset carrinho[1].valor=189>
<cfset carrinho[1].quantidade=1>

<cfset carrinho[2]=StructNew()>
<cfset carrinho[2].nome="Chuteira CR7">
<cfset carrinho[2].valor=470>
<cfset carrinho[2].quantidade=2>

<cfset carrinho[3]=StructNew()>
<cfset carrinho[3].nome="Short do Messi">
<cfset carrinho[3].valor=180>
<cfset carrinho[3].quantidade=1>

<cfdump var="#carrinho#">

<cfloop list="#carrinho#" item="name" index="i">
    <cfoutput>
        #i#:#name#
    </cfoutput>
</cfloop>

Ответы [ 4 ]

0 голосов
/ 29 июня 2018

Вот пример CF10, который зацикливает массив, а затем использует внутренний цикл, чтобы зациклить структуру, которая представляет каждый индекс массива:

<cfoutput>

  <cfset carrinho=ArrayNew(1)>

  <cfset carrinho[1]=StructNew()>
  <cfset carrinho[1].nome="Camisa da Seleção Brasileira">
  <cfset carrinho[1].valor=189>
  <cfset carrinho[1].quantidade=1>

  <cfset carrinho[2]=StructNew()>
  <cfset carrinho[2].nome="Chuteira CR7">
  <cfset carrinho[2].valor=470>
  <cfset carrinho[2].quantidade=2>

  <cfset carrinho[3]=StructNew()>
  <cfset carrinho[3].nome="Short do Messi">
  <cfset carrinho[3].valor=180>
  <cfset carrinho[3].quantidade=1>

  <cfloop array="#carrinho#" index="obj">
    <cfloop collection="#obj#" item="key">
      #key#: #obj[key]#<br />
    </cfloop>
    <br />
  </cfloop>

</cfoutput>
0 голосов
/ 28 июня 2018

Чтобы построить ответ RRK и комментарии Ageax: Вот как легко создать массив (с вложенной структурой) в скрипте ColdFusion.

Примечания:

"//" = комментарий

"[]" = неявный массив

"{}" = неявная структура

<cfscript>

  // Build the array with structs.
  carrinho = [  
    {    
        nome : "Camisa da Seleção Brasileira" ,
        valor : 189 ,
        quantidade : 1
    } ,
    { 
        nome : "Chuteira CR7" ,
        valor : 470 ,
        quantidade : 2
    } ,
    { 
        nome : "hort do Messi" ,
        valor : 180 ,
        quantidade : 1
    }
  ] ;

  // Using the counter method to determine the number     
  counter=1 ;
  for(item in carrinho) {
    writeoutput(counter & ". " & item.nome & "<br>") ; 
    counter++;
  }


  // Using each() member function
  carrinho.each(function(element, index) {
      writeOutput(index & ". " & element.nome & "<br>");

  });  

</cfscript>

DEMO

Выходы:

  1. Camisa da Seleção Brasileira
  2. Chuteira CR7
  3. Хорт-ду-Месси
0 голосов
/ 28 июня 2018

Вот решение для вас

<cfset carrinho=ArrayNew(1)>

<cfset carrinho[1]=StructNew()>
<cfset carrinho[1].nome="Camisa da Seleção Brasileira">
<cfset carrinho[1].valor=189>
<cfset carrinho[1].quantidade=1>

<cfset carrinho[2]=StructNew()>
<cfset carrinho[2].nome="Chuteira CR7">
<cfset carrinho[2].valor=470>
<cfset carrinho[2].quantidade=2>

<cfset carrinho[3]=StructNew()>
<cfset carrinho[3].nome="Short do Messi">
<cfset carrinho[3].valor=180>
<cfset carrinho[3].quantidade=1>

<cfdump var="#carrinho#">

<cfloop array="#carrinho#" index="i">
    <cfoutput>
        #i.nome#
    </cfoutput>
</cfloop>

Вы должны использовать массив вместо списка.

0 голосов
/ 28 июня 2018

Причина в том, что carrinho - это массив, а не список. Вы можете сделать это разными способами.

  1. Способ заключается в цикле с использованием атрибута array

    <cfset counter=1>
    <cfloop array="#carrinho#" index="item">
      <cfoutput>#counter#. #item.nome#</cfoutput>
      <cfset counter++>
    </cfloop>
    

    DEMO

  2. Использование индексного цикла с ArrayLen

    <cfloop from="1" to="#ArrayLen(carrinho)#" step="1" index="i">
      <cfoutput>#i#. #carrinho[i].nome#</cfoutput>
    </cfloop>
    

    DEMO

  3. Использование cfscript for loop

    <cfscript>
      counter=1;
      for(item in carrinho){
        writeoutput("#counter#. #item.nome#")
        counter++;
      }
    </cfscript>
    

    DEMO

Это всего лишь несколько способов сделать это. Есть много других способов сделать это.

...