2012-05-25 1 views
1

Meteor Session 오브젝트에 가입하여 Session 오브젝트에서 데이터가 .set 일 때 반응 템플릿보기가 자동으로 렌더링되는 방법이 있습니까? 특히 키/이름 및 값 데이터?대응 성있는 템플릿 렌더링 업데이트를 위해 Meteor Session을 구독 할 수 있습니까?

나는 반복 된 Meteor Session 객체 데이터 렌더링과 관련된 비슷한 질문을 가지고있다. 이 질문은 목적에 따라 구체적으로 다릅니다. 나는 같은 방법으로 할 수있는 더 좋은 방법과 대체 방법으로 대답을 얻고 싶다.

나는 Session.get ('name');을 호출 할 필요가 없다. 이 유스 케이스는 Session 객체의 이름을 모르기 때문입니다.

그래서,

{{#each Session}} 
{{this.key}} {{this.value}} 
{{/each}} 

답변

2

세션에 가입에 대해 확실하지만, 두 번째 부분에 대한 ...

사이비 코드에 나와 있습니다 핸들에서 뭔가를 할 수 있도록하고 싶습니다 귀하의 질문에, 당신은이를 사용할 수 있습니다

다음
Template.hello.session = function() { 
    map = [] 
    for (prop in Session.keys) { 
    map.push({key: prop, value: Session.get(prop)}) 
    } 
    return map 
} 

템플릿에 :

{{#each session}} 
    {{key}} {{value}} 
{{/each}} 

더 세련된 방법이 있는지는 모르지만 작동합니다.

+0

감사합니다.지도를 사용하는 법을 배워야합니다. –

2

저는 그렇게 생각하지 않습니다.

https://github.com/meteor/meteor/blob/master/packages/session/session.js을 살펴보십시오. 실제로는 비교적 간단합니다. 무효화는 45-47 행에서 발생합니다. Session.set으로 전화하면 특정 키를 듣는 사람을 모두 (Session.get을 통해) 무효화하거나 새로운 값 또는 이전 값을 Session.equals 통해 무효화합니다. 전체적으로 세션을 무효화하는 방법은 없습니다.

한편, 얼마나 간단한지를 고려하여 원하는 것을 수행하는 자신의 데이터 구조를 작성하는 것이 매우 어렵지는 않습니다. 귀하의 유스 케이스는 무엇인지 모르겠지만 세션과 분리하는 것이 중요 할 수 있습니다.

1

예 세션 값을 구독 할 수 있습니다.

는 자동 가입에 대해 살펴에게 워드 프로세서를 가지고 :이 코드 블록이를 사용하는 한 가지 방법을 보여줍니다

http://docs.meteor.com/#meteor_autosubscribe

// Subscribe to the chat messages in the current room. Automatically 
// update the subscription whenever the current room changes. 
Meteor.autosubscribe(function() { 
Meteor.subscribe("chat", {room: Session.get("current-room");}); 
}); 

. 기본적으로 "current-room"의 값이 변경되면 Meteor는 뷰를 업데이트합니다.

편집 나는 처음 질문을 오해 내가 어느 정도 자신을 구속 할 필요가 결정했다. 방금 테스트를 수행했고 현재까지는 collection.find() 및 session.get() 호출 만 구독 할 수 있다고 말할 수 있습니다. 따라서 전체 세션 객체 또는 키 객체에 가입 할 수 없습니다.

그러나 세션 값을 개체에 설정할 수 있습니다. 가장 좋은 해결책은 아니지만 원형 개체 오류가 발생하지 않도록 유지하기 위해 일부 해커가있는 키 개체를 추적하는 데 유용했습니다.

var mySession = { 
    set: function(key, val){ 
    var keys = Session.keys, 
     map = {}; 
    Session.set(key, val); 

    for (var prop in keys) { 
     if(!(prop === "keys")){ 
     map[prop] = keys[prop]; 
     } 
    } 
    Session.set('keys', map); 
    } 
}; 

원래의 기능과 매우 흡사하며 세션 값을 추가하거나 변경할 때 템플릿을 추적하고 업데이트하는 데 도움이되는 내용을 제공합니다. "

<template name="hello"> 
    <div class="hello"> 
    {{#each keys}} 
     {{key}} {{value}} <br /> 
    {{/each}} 
    </div> 
</template> 

그냥 ("일 "mySession.set를 호출 할 수 있습니다이 방법 :

여기에 (이전 답변에서 차용) 내 템플릿 도우미입니다 :

Template.hello.keys = function() { 
    map = []; 
    keys = Session.get('keys'); 
    for (var prop in keys) { 
    map.push({key:prop, value:keys[prop]}); 
    } 
    return map 
}; 

그리고 여기에 실제 템플릿입니다 또 다른 것 ") 화면에 업데이트됩니다. 나는 Javascript에 익숙하지 않으므로 누군가가 분명히 여기에 뭔가 빠져 있다면 알려 주시거나,이 일을 좀 더 우아한 방법으로 알려주십시오.

+0

질문은 하나의 값이 아니라 전체 유성 세션에 관한 것입니다. –

+0

네, 맞습니다. 나는 이것에 독해에 실패했다. – Joeyjoejoejr

+0

요청 된 실제 질문에 대한 답변을 보려면 편집을 참조하십시오. – Joeyjoejoejr

0

이 방법으로 세션 개체에 액세스하는 것은 가능합니다. 시원한 음료를 마시지 않습니다.

다른 말로하면, Meteor는 게시/구독과 관련하여 탁월합니다. 브라우저가 충돌하기 전에 얼마나 많은 데이터를 Session 객체에 넣어야하는지 명확하지 않습니다 (나에게). 나는 오히려 알아 내지 않을 것입니다.

이전 답변에서 언급 한 것처럼 구독에 플러그하기 위해 모든 세션 종속 코드를 Deps.autorun() 함수에 넣기 만하면됩니다. 세션이 변경 될 때마다 구독을 수정합니다. 준비 콜백을 첨부하거나 subscription.ready() 검사를 사용하여 특정 작업을 시작할 수 있지만 이상적으로는 렌더링 된/파괴 된 함수를 사용할 수있는 방식으로 템플릿을 구조화하고 {{isolate}}/가능하면 {{상수}}.

당신이 얻는 것은 단순한 일을하기가 어렵습니다. 미래에 유성의 변화를 고수하지 않을 수도 있습니다. 우리는 항상 publish/subscribe가 예상대로 작동 함을 확신 할 수 있습니다 ... 주어진 Session은 단순한 객체입니다. 누군가가 곧 뭔가를 디자인하게되면 유성으로 합쳐집니다. Session을 깨뜨릴 수없는 커스텀 객체를 기반으로 한 이상한 워크 플로우가 남아 있습니다. 인터페이스의 다른 부분에 영향을 미칠 수 있습니다.

관련 문제