2017-02-21 1 views
0

필자는 기존 db.dbName.find() 커서 대신 배열을 반환하는 도우미 함수를 사용합니다. 템플릿에 사용할 수있는 db.dbName.find()에 의해 생성 된 것과 비슷한 커서로 반영되도록 return array을 어떻게 코딩합니까?템플릿으로 사용할 수있는 배열/값을 커서로 반환하려면 어떻게해야합니까?

나의 도우미 함수를 보자 :

var arrayTest = Meteor.call('getUserCategoryArray', function(error, results){ 
    if(error){ 
     console.log(error.reason); 
    } else {   

    var results1 = results.toString(); 
    var results2 = results1.split(","); 
    alert("Array content: " +results2); 
    alert(results2[0]); 
    alert(results2[1]); 
    alert(results2[2]); 

    return results2; 

    } 
}) 

코드의 일부를 설명하기 위해 : 위에서 아래에서 : 경고가 성공적으로 출력합니다 :

Array content: shoes,clothes,watches 

shoes 

clothes 

watches 

경고가 results2을 확인하기 위해 단지이다 작동하는 배열입니다. 이제 반환 값/배열을 db.dbName.find() 쿼리에 의해 반환 된 커서 인 것처럼 템플릿에서 사용할 수 있도록 코딩하는 방법은 무엇입니까?

귀하의 도움에 감사드립니다.

+0

#each 핸들바에 배열을 전달할 수 있습니다. [예제를 여기에서 체크 아웃] (http://stackoverflow.com/questions/21234947/meteor-handlebars-how-to-access-a-plain-array) – mutdmour

+0

@mutdmour 감사합니다. 그러나 그것을 적용하는 방법을 이해하지 못했습니다. 내 코드. 나는 템플릿에서 이것을 시도했다. {{{#each results2}} \t {{this}} {{/ each}}'는 효과가없는 것으로 보인다. 나 또한 도우미 함수 이름을 시도했다 : allCategorie, 그래서 나는 {{# allcategories}} \t {{this}} {{/ each}}'을 시도했다. 아직도 didnt 한 일. 어떤 도움을 주시면 감사하겠습니다. – SirBT

답변

1

문제는 배열에 관한 것이 아니라 동기식 프로그래밍과 비동기식 프로그래밍에 관한 것입니다. @mutdmour가 언급했듯이 스페이스 바는 도우미로부터 배열을 잘 처리 할 수 ​​있습니다.

헬퍼는 템플릿이 렌더링 될 때 여러 번 호출 될 수 있으므로 비동기 또는 부작용이 없어야합니다. 당신의 도우미가 비동기 호출을하고 있기 때문에 그것은 박쥐 바로 한 문제입니다.

문제는 이러한 호출이 비동기이며, 도우미가 동기화되어야한다는 것입니다. 그래서 도우미가있는 그대로 일하도록하는 것이 어려울 것입니다.

많은 경우 헬퍼는 컬렉션의 내용이나 커서를 컬렉션의 콘텐츠로 반환합니다. 귀하의 앱을 모르지만 컬렉션 내용을 더 잘 선택하여 게시/구독하고 있습니까?

아니더라도, 그리고 메소드 호출의 결과로 보유하고, 일반적으로 난 것

  1. 반응성 VAR에 결과를 쓰기 onCreated()의 호출을
  2. 도우미로부터 반응 변수를 반환합니다.

예 :

Template.Foo.onCreated(function() { 
    let self = this; 
    self.clothing = new ReactiveVar(); 

    Meteor.call('getUserCategoryArray', function(error, results) { 
     if (!error) { 
      // or whatever you need to do to get the results into an array 
      self.clothing.set(results); 
     } 
    }); 
}); 

Template.Foo.helpers({ 
    clothing() { 
     return Template.instance().clothing.get(); 
    } 
}); 
관련 문제