Iron-router가 렌더링 전에 내 컬렉션에서 성공적으로 find 메소드를 기다리고있는 솔루션을 찾고 있습니다.Iron-router는 렌더링 전에 데이터 객체로 Collection.findOne()을 대기합니다.
내 경로는 다음과 같습니다이 잘 작동
this.route('business', {
path : '/business/:type/:_id',
waitOn : function() {
return Meteor.subscribe('business', this.params._id);
},
data : function() {
return Business.findOne({_id: this.params._id});
}
});
. Iron-router는 Collection을 구독하면 클라이언트에 적합한 Document back을 얻을 수있을 때까지 기다리는 것 같습니다. 그러나 필자의 템플릿에 필요한 데이터는 findOne 함수에 지연이 있습니다. 같은 문제를 가진 사람에 대한
Template.businessItemItem.rendered = function() {
console.log(Router.current().data()); // undefined
window.setTimeout(function(){
console.log(Router.current().data()); // [Object]
}, 1000);
}
솔루션 . 다음과 같이 경로에 '액션'메소드를 추가하십시오.
action : function() {
if (this.ready()) this.render();
}
이 방법을 사용하면 모든 것이 정상적으로 작동합니다.
당신은 내 영웅입니다! 이것은 나를 미치게했다. 솔루션은 완벽하지만 더 자세히 조사 할 것입니다. 철제 라우터의 버그 일 경우 github에 대한 문제를 열어야합니다. 감사! – physiocoder
네, 그렇게해야한다고 생각합니다. reference : https://github.com/EventedMind/iron-router/blob/dev/DOCS.md#waiting-on-subscriptions-waiton waitOn 메서드는 렌더링 전에 데이터를 기다리고 그것을 반환합니다. 내가 현재 무엇을하지 않습니다 ... – TJR
데이터를 추가하기위한 빠른 업데이트는 data() 함수가 호출되기 전에 action() 메서드()를 호출하기 전에 브라우저에서 새로 고침 . 이 경우에도이 솔루션은 작동하지 않습니다 :-(그래서 나는이 게시물에서 제안한 것처럼 data() 메소드의 첫 번째 줄에'if (! this.ready()) return;'을 넣었습니다 : https : /groups.google.com/forum/#!topic/meteor-talk/lK3v9ZxIbco – physiocoder