2012-12-22 3 views
5

때로는 동일한 데이터를 여러 템플릿에 선언하는 경우가 있습니다. 예를 들어 :여러 템플릿에서 데이터를 공유 할 수 있습니까?

Template.auction_page.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

을하지만 모두 선언을 제거 할 수있는 방법이있다 :

Template.auction_page.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

나는 세계를 사용하여 더 잘 만들 수 있습니까? 즉, 기본적으로 일부 글로벌 데이터를 여러 템플릿에 공유 할 수있는 방법이 있습니까?

답변

5

좋은 해결책을 발견했습니다 (도우미의 도움을 받아!).

글로벌 귀하의 :

global = _.extend({}, { 
    regions: [ "Americas", "Europe", "Asia" ] 
} 

도우미 : 이제

Handlebars.registerHelper("global", function(name) { 
    return global[name]; 
}); 

모든 템플릿이 사용할 수있다는 :

<select> 
    {{#each global "regions"}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 
1

당신은 이것에 대한 Session를 사용할 수 있습니다

Template.auction_page.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 
    Template.auction_editor.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 

세션을 사용하여의 좋은 보너스, 즉 그것이 다시 렌더링 할 연관된 모든 템플릿의 원인이됩니다 설정, 반응성 데이터 소스이기 때문에. 따라서 귀하의 경매 기간은 귀하가 전화하시는 즉시 업데이트됩니다. Session.set("auctionDurations", [ 30, 60, 120 ]);

+0

Sry,하지만 오해했습니다. 나는이 할당 선언을 모두 없애고 싶었다. – Dave

2

도우미 함수의 사용은 꽤입니다 좋은 범용 솔루션. 완전을 위해 다음과 같이 간단한 할당을 할 수도 있습니다.

Template.auction_page.auctionDurations = Template.auction_editor.auctionDurations; 
+0

아, 그래도 좋은 지름길이 될 수 있습니다. 나는 이것이 로딩 순서에 따라 작동하지 않을 수도 있다고 생각한다. 그러나 기존 코드 중 일부를 살펴보면로드 순서가 중요하지 않음을 알 수 있습니다. 내가 여기서 뭔가를 놓치고 있니? – Dave

+0

로드 순서는 다음 두 가지 이유로 인해 발생하지 않습니다. 1) 렌더링 순서에 관계없이 명시 적으로 값을 가져 오는 중입니다. 2)이 경우 구체적으로 값은 정적입니다 (동적 컬렉션에서도 저에게 효과적 이었지만). –

관련 문제