2012-11-14 1 views
5

문서가 변경되면 Meteor가 다시보기를 렌더링합니다.특정 필드가 변경 될 때 다시 렌더링되지 않는 유성

Template.story.data = function() { 
    var storyID = Session.get('storyID'); 
    var story = Stories.findOne({ 
    _id: storyID 
    }) 

    if (!story) 
    return; 

    return story; 
}; 

다음은 스토리 문서의 스토리를 가져 오는 스토리 템플릿 용 템플릿 도우미입니다.

story.title과 같은 필드가 변경되면 템플릿을 다시 렌더링하고 싶습니다. 그러나 story.viewingusers과 같은 필드가 변경되면 템플릿을 다시 렌더링하고 싶지 않습니다. 어쨌든 그런 일이 생길까?

질문을 유발 한 특정 문제는 해당 필드를 게시하지 않도록 게시 기능을 설정하여 해결되었습니다. 그러나이 솔루션은 모든 유즈 케이스에서 작동하지 않으며 일반적인 해결책이 필요합니다.

+0

시도 템플릿은 보존? – crapthings

+0

여전히 올바른 데이터가 맞습니까? 템플릿이 여러 번 렌더링되는 것을 원하지 않는 이유가 있습니까? (최적화 이상입니까?) –

+0

@TomColeman 데이터가 맞지만 popover로 표시되는 인터페이스 요소가 있습니다. 요소가 다시 렌더링 될 때마다 Popover가 파괴됩니다. 그건 정말 짜증나. – Harry

답변

3

찾고 싶은 것은 #constant 템플릿 도우미입니다.

당신의 경우에는 상수 블록에 팝업 마크 업을 포장 한 다음 story.rendered 함수에서 해당 블록의 내용을 수동으로 업데이트해야합니다.

그래서 이런 식으로 뭔가 :

story.html :

<template name="story"> 
    ... 
    {{#constant}} 
     <!-- Popover markup here --> 
    {{/constant}} 
    ... 
</template> 

client.js :

Template.story.rendered = function(){ 
    //Update logic here 
} 
+0

이것은 옵션이지만 유성 스타일 논리를 파멸시키고 많은 복잡성을 추가하므로 문제를 직접적으로 해결할 수 있기를 바랍니다. – Harry

+0

음, 유성 스타일 논리에 대해서는 잘 모르겠지만 유성의 '당사자'예제에서이 기법을 배웠습니다. 당신은 그 예를 통해 살펴 봐야합니다. 자동 로직을 로직 주위로 감싸서 업데이트 논리는 '유성 스타일'에서도 무효화됩니다. –

+0

글쎄, 이것은 Meteor.render를 사용하거나 dom 조작으로 HTML을 만들도록 강요합니다. 어느 쪽도 위대하지 않습니다. 나는 당사자의 예를 확인했고 이것이 그들이하는 일이다. 이 작동합니다. 하지만 렌더링 속도가 느려지고 템플리트 대신 자바 스크립트에 템플리트 코드가 삽입되어 템플리트를 더 많은 조각으로 나누어야합니다. 3 가지 모든 것들이 복잡성을 더하고 유지하기가 어렵게 만듭니다. 하지만이 말은 매우 유용하고 유용한 답변입니다. 감사합니다. – Harry

관련 문제