2017-02-14 4 views
0

유성우 프로젝트에서 유성 개체를 가져 와서 html로 반복하려고합니다.html로 유성 개체를받을 수 없습니다

<ul> 
    {{#each userTerritory myObject}} 
    <li class="">{{myObject.name}}</li> 
    {{/each}} 
    </ul> 

이 client.js에서 헬퍼 클래스를 생성하고 몽고 DB를

Template.dash_board_content1.helpers({ 

     'userTerritory': function(){ 

     Meteor.call('userTerritoryList',function(error,result){ 
      console.log(result); 
      if(!error){ 

      return result; 

        }else{ 
      alert("error : " + error); 
      } 

     }); 
     } 
    }); 

방법에서 개체를 검색하기 위해 다음과 같이 내가 메서드 호출을 수행하고 다음과 같이

내 HTML 코드입니다 server.js에 다음과 같이 입력하십시오.

+0

왜 게시/구독 대신에 Meteor 메소드 호출을 원하십니까? – zim

+0

@zim 메소드 사용은 보안과 관련하여 더 나은 접근 방법으로 간주됩니다. 메소드를 사용하고 진위성, 역할 등에 대한 점검을 구현하는 것이 여러 번 권고되었습니다. – Jankapunkt

+0

Meteor 방법과 클라이언트 쪽 쓰기를 생각하고 있다고 생각합니다. pub/sub는 안전하며 imho는 메서드 호출보다 문제에 더 적합합니다. – zim

답변

0

Meteor 메소드는 기본적으로 Blaze의 도우미와 작동하지 않습니다. 그들이 당신이 패키지를 사용할 수 있습니다 함께 작동합니다 meteor-reactive-method

Template.dash_board_content1.helpers({ 
    userTerritory: function(){ 
    return ReactiveMethod.call('userTerritoryList'); 
    } 
}); 
0

편집 : @zim가 지적했듯이, 오히려 유성의 발행 및 구독 기능을 사용할 수 있습니다. 이것은 설명 된 문제에 대한 최상의 해결책이 될 것입니다. 더에

읽기 : @Khang는 지적 https://guide.meteor.com/data-loading.html 여전히 서버 측 호출을 사용에 의존하는 경우

, 당신은 어느 반응 방법 패키지를 사용할 수 있습니다.

import {Template} from 'meteor/templating'; 
import {ReactiveDict} from 'meteor/reactive-dict'; 

// create a new reactive dictionary to store reactive variables 
// let's call it state 
Template.dash_board_content1.onCreated(function onCreated(){ 

    //this refers to the Template.instance() here 
    this.state = new ReactiveDict(); 

    //initial value of userTerritoryList is null 
    //it will return nothing until it has been changed 
    this.state.set('userTerritoryList', null); 
    //you can even set an errors variable 
    this.state.set('errors', []); 
}); 

는 그런 다음) (Template.instance를 통해 반응 DICT에 액세스 할 수 있습니다 : 당신이 당신의 결과 값에 대한 자세한 세분화 된 액세스 할 수 있도록하려면, 당신은 반응성 딕셔너리를 사용한다

Template.dash_board_content1.helpers({ 

    'userTerritory': function(){ 
     const territoryList = Template.instance().state.get('userTerritoryList'); 

     if (territoryList) return territoryList; 

     Meteor.call('userTerritoryList', function(error,result){ 
      if(!error){ 
       Template.instance().state.set('userTerritoryList', result); 
      } else { 
       const errs = Template.instance().state.get('errors'); 
       errs.push(error); 
       //update errors 
       Template.instance().state.set('errors', errs); 
      } 
     }); 
    }, 

    'getErrors' : function() { 
     //use in your template to display multiple err messages 
     return Template.instance().state.get('errors'); 
    }, 
}); 

useTerritory을 헬퍼는 설정되지 않은 경우에만 Meteor.call을 사용합니다. 여전히 메서드를 쉽게 변경할 수 있으므로 항상 메서드를 호출합니다.

따라서 더욱 세분화 된 오류 처리를 구현할 수 있습니다.

+0

imho 헬퍼가 비동기가 아니어야합니다. 메소드 호출을 onCreated()의 autorun()에 넣고 도우미가 반응하는 var의 내용을 반환하도록하십시오. – zim

+0

당신도 그렇게 할 수 있습니다. 내 autorun이 너무 커지지 않도록이 방법을 선호합니다. 모든 반응 변수 관련 코드가 제 위치에있을 때 디버깅하기가 훨씬 쉬워졌습니다. – Jankapunkt