2013-08-06 2 views
1

아래에 표시된 것처럼 대부분의 템플릿 도우미를 대표하는 Meteor Handlebars 템플릿 도우미가 있습니다.이 템플릿 도우미에서 반복을 제거하려면 어떻게합니까?

# Address Form Controls Template 
Template.AddressFormControls.helpers 
    address1:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building?.address?.address1 

    address2:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building.address.address2 

    city:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building.address.city 

    state:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building.address.state 

    zip_code:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building.address.zip_code 

    main:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building?.phone?.main 

    fax:() -> 
     if typeof Session.get('edit-building') is 'string' 
      building = Buildings.findOne(Session.get('edit-building')) 
      return building?.phone?.fax 

당신은 모든 도우미가 세션 변수가 문자열이 있는지 확인하기 위해 if 문이 포함되어 있음을 알 수 있습니다. 문자열이면 필요한 객체를 검색하는 데 사용할 수있는 ID 여야합니다.

하나의 프로젝트에서 여러 컬렉션을 반복하여 사용하는 것은 낭비입니다.

어떻게하면 드라이를 할 수 있습니까?

오비완 당신은 내 유일한 희망입니다!

답변

1

당신은

JS처럼 뭔가를 단축 할 수있다 :

main:function() { 
    building = Buildings.findOne({_id:Session.get('edit-building')}) 
    return building && building.phone && building.phone.main; 
} 

커피 :

main:() -> 
    building = Buildings.findOne(_id: Session.get("edit-building")) 
    building and building.phone and building.phone.main 

의 주요 차이점은 당신이 _id이 일치 할 말을 명시 적으로되고. 따라서 edit-building에 대한 Session 변수가 없거나 문자열이 아니거나 어떤 레코드와도 일치하지 않는 경우 아무 것도 반환되지 않습니다. 당신은 할 수 귀하의 HTML에서 그런

building:() -> 
    Buildings.findOne(_id: Session.get("edit-building")) 

합니다 (AddressFormControls 템플릿) :

{{#if building}} 
    Phone: {{building.phone.main}} 
    Fax: {{building.phone.fax}} 
    .... 
{{/if}} 
+0

를 메인 함수에서'VAR 및 anotherVar을 반환

그냥이 너무 많은 코드를 단축 될 수도 있습니다 otherVar'는 실제 값이 아닌'true' 또는'false' 값을 반환합니다. 그건 내가 찾는 것이 아니다. 샘플 코드에서 반환 된 실제 값이 필요합니다. – DigiLord

+0

왜 그것이 진실 또는 거짓을 돌려 줄까요? '와'는'&&'로 변환되지 않습니까? 마지막 문장은 자바 스크립트의 최종 값으로 간주됩니다. Ie'1 && 2 && 3 && 4 === 4' – Akshat

+0

답안의 두 번째 부분은 내가 필요로하는 것처럼 작동합니다. – DigiLord

관련 문제