2014-04-01 5 views
1

그래서 나는 다음과 같은 템플릿을 보여주는 {{#each game}}으로 반복됩니다 템플릿의 무리가 : "페이지 1"상자를 클릭Meteor에서 동적 요소를 숨기려면 어떻게해야합니까?

내가 표시 할
<template name="game"> 
{{#if condition}} 
    <div class="box"> 
     Page 1 
    </div> 
{{else}} 
    <div class="box"> 
     Page 2 
    </div> 
{{/if}} 
</template> 

"페이지 2", 그래서 다음이 :

Template.game.events({ 
    'click .box': function(e) { 
     Session.set("condition", true); 
    } 
}); 

그러나 나는 다른 게임 템플리트 모두가 클릭 된 페이지 2로 전환하는 것을 원하지 않습니다. 어떻게해야합니까?

편집 : 변경 사항은 모든 사용자가 아니라 현재 사용자에게만 적용됩니다.

답변

1

가정 게임은 Meteor.Collection에 저장되고, condition는뿐만 아니라 현재, 당신은 같은 것을 할 수있는 모든 사용자에 대해 반영해야 문서의 속성입니다 :이 경우

Template.game.events({ 
    'click .box': function(event, template) { 
     Games.update(
      {_id: template.data._id}, 
      {$set: {condition: !template.data.condition}} 
     ); 
    } 
}); 

Template.game.events({ 
    'click .box': function(event, template) { 
     Session.set("condition-" + template.data._id, true); 
    } 
}); 

Template.game.condition = function() { 
    return Session.get("condition-" + this._id); 
}; 

당신은 삶을 함께 비슷한 기능을 달성 할 수 : 현재 사용자에 영향을해야 템플릿 인스턴스 특정 세션 변수를 사용하고 도우미 기능을 반환 할 수는 condition라고 난 수집.

+0

아, 내가 현재 사용자에게만 영향을 주도록 지정 했어야합니다. –

1

세션 변수를 사용하지 마십시오! 바로 그 이유는 여러분이 갖고있는 문제이며, 그들은 이전의 전역 변수와 같습니다. 대신 템플릿 데이터를 사용하십시오.이 템플릿은 로컬이므로이 경우 원하는대로 동작을 제어하는 ​​데 사용할 수 있습니다.

Template.game.created = function() { 
    this.data.conditionValue = 'something'; 
    this.data.conditionDep = new Deps.Dependency(); 
}; 

Template.game.condition = function() { 
    this.conditionDep.depend(); 
    return this.conditionValue; 
}; 

Template.game.events({ 
    'click .box': function(e, t) { 
    t.data.conditionValue = 'somethingElse'; 
    t.data.conditionDep.changed(); 
    }, 
}); 
+0

흠, 템플릿 인스턴스의 데이터 속성에 대한 문서에서이 경고 때문에 "Access is read-only and non-reactive." "헬퍼에서 템플릿 인스턴스 객체에 현재 액세스 할 수 없습니다. 우리는 템플릿 인스턴스의 작동 방식을 리팩터링하여보다 보편적으로 액세스 할 수있게 할 계획입니다." 이것이 작동한다면 분명히 키에서'_id's와 함께 세션 변수를 사용하는 것보다 훨씬 깨끗해 보입니다. – sbking

+0

두 번째 부분은 정확합니다. 헬퍼에서 템플릿에 액세스하지 않고 문맥으로 제공된 데이터 만 액세스합니다. 액세스는 실제로 비 반응적이므로 사용자 자신의 의존성을 제공해야합니다. 나는 데이터가 읽기 전용이라는 경고를 알지 못했고 그것에 문제가 없었습니다. 나는이 패턴을 항상 사용합니다. 그 경고가있을 때부터 확인할 수 있습니까? 아마도 그것은 새로운 것이지만 현재 릴리스에서 어떤 문제도 알지 못했습니다. –

+1

몇 가지 테스트가 끝나면 템플릿 인스턴스의'data' 객체에 추가 된 사용자 정의 필드는'meteor mongo' 콘솔에서 문서가 변경되면 제거됩니다. 아마도 이것은 다른 유성 사용자 나 서버가 변경 한 내용에도 적용된다고 가정합니다. 불행히도 지금처럼 'Session', 로컬 컬렉션 또는 템플릿 인스턴스에없는 사용자 지정 반응식 데이터 소스를 사용하는 것이 가장 좋은 방법입니다. 헬퍼가 템플릿 인스턴스 자체에 접근 할 수있는 경우,'data'보다는 필드를 직접 추가하는 것이 안전 할 것입니다. – sbking

0

가 나는 또한 좋은 생각 같은 소리하지 않는 ID로 세션을 사용하는 느낌, 그리고 사용하는 세션보다 더 나은 것 같다이 대답을 발견 : 귀하의 예제에서 템플릿

Using Meteor sessions to toggle templates

관련 문제