2017-02-01 14 views
0

좋아 호출 MeteorJS -이 조금 이상한 있도록 목록 항목이 게시/가입 및 방법을 구현 한 후 업데이트하지 않음/...

내가 가지고 서버 측에서 이러한 방법 ...

Meteor.publish('todos', function() { 
return Todos.find({userId: this.userId},{sort:{createdAt:-1}}); 
}); 

Meteor.methods({ 
    editTodo: function(todoId) { 
     Todos.update(todoId, {$set: {checked: !this.checked}}); 
    } 
}); 

그리고 여기 클라이언트 측에서 호출 ....

Template.list.helpers({ 
    todos: function(){ 
     Meteor.subscribe('todos'); 
     return Todos.find({}); 
    } 
}); 
Template.list.events({ 
    "click .toggle-check": function(){ 
     Meteor.call('editTodo',this._id); 
    }}); 

문제는이 그 때의 클릭 ".toggle-확인"발생 ... '확인'부울에 트리거하지만 벗기되지 않습니다 .. .. 이거 야. {checked :! this.checked}) 컬렉션에서 즉시 읽은 필드를 참조하지 않습니까? 아니면 데이터를 구독 할 때 잘못된 정보를 구현하고 있습니까?

도와주세요!

+1

"this.checked"가 올바른 방법으로 해결 되나요? 이상하게 보입니다. – zim

+0

체크 된 상태를 체크 박스로 렌더링했기 때문에보기에 렌더링되고 있습니다. (더 많은 조사가 끝난 후) 업데이트가 발생하지 않는 것 같습니다. 무엇이 밖으로 놓치고있다 나는 여기에 전체 CRUD SELECT, INSERT, DELETE 잘 작동하는지 제대로 작동하지 않는 것으로 보인다. 더 자세히 살펴보면 업데이트 버튼을 눌렀을 때 콘솔에서 서버 측을 통해 행을 검색하여 보여 주며 항상 true로 설정되지만 false로 설정되지는 않습니다. 그래서! this.checked는 본질적으로 작동하지 않습니다. 또한 허용/거부하지 않음! – Metrophobe

+0

예, 저는 "이"가 아마 당신이 그 맥락에서 생각하는 것이 아닐 것이라고 말하고 있습니다. 적어도, 나는 그런 식으로 사용되는 것을 본 적이 없다. 나는 "this"의 사용을 디버깅하는 것으로 진행할 것이다. – zim

답변

1

나는이 문제가 귀하가 제안한 것처럼 등록 등록과 관련이 있다고 생각합니다. 구체적으로는 이 Template.helpers 함수 내에서 호출되고 있습니다.

Template.body.onCreated() 또는 Template.list.onCreated()과 같은 이전 이벤트 또는 템플릿 이벤트로 구독을 이동해보십시오 (요구 사항에 따라 다름).

Meteor 설명서에 좋은 예가 있습니다 : https://www.meteor.com/tutorials/blaze/publish-and-subscribe (10.3 절 참조).

+0

지금 당장은 PC 앞에서는 아니지만 귀하의 제안을 기다리고 계속 게시 할 것입니다. 그래서 당신은 대기 시간 때문에 그것을 생각합니까? Meteor.startup()에 모든 구독을 재배치하면 문제가 해결 될 것이라고 생각합니까? – Metrophobe

+0

필자는 그 두 가지 질문에 대해 정확하다고 믿습니다. 결국, 필자는'\ imports \ startup \에있는'Template.body.onRendered (function() {}) '내에서'Meteor.subscribe()'호출을 재배치했습니다. client \ index.js' 그리고 매우 원활하게 작동합니다. – David

+0

구독은 도우미에 없어야합니다. (나는 onCreated()로 옮길 것입니다.) 나는 그게 문제라고 생각하지 않습니다. 그 도우미에서 find()는 여전히 반응 적이어야합니다. Blaze가 그 도우미에게 전화하기로 결정할 때마다 계속해서 구독 할 필요가 없습니다. 한 번 충분합니다. – zim