이 깜박이는 문제를 밝혀 지 Iron Router는 wait() 및 ready() 메소드를 사용하여 문제를 해결할 수있는 해결 방법을 제공 할 수 있지만 실제로 Iron Router가 아닌 Meteor 문제입니다.
필자의 특별한 경우에는 가입을 기다리지 않고 Meteor.call 결과를 기다릴 필요가있었습니다. 이것을 달성하기 위해 Iron Router가 이해할 수있는 준비된 메서드로 객체 핸들을 반환하는 익명의 함수를 만들었고 나중에 루트 논리에서 구현할 수있었습니다.
신디스는 불완전한 해결책 이었지만 올바른 방향으로 나를 인도했습니다. 아래는 내가 그것을 달성하는 방법입니다
Router.onBeforeAction(function (params) {
var self = this;
if (params.url.match(/admin/)) {
this.wait(function(){
Meteor.call('isInstalled', function (err, result) {
Session.set('installationCheck', true);
Session.set('isInstalled', result);
});
return {
ready: function() {
return Session.get('installationCheck');
self.next();
}
}
});
if (this.ready()) {
if (Session.get('isInstalled')) {
this.next();
} else if(Session.get('isInstalled') === false) {
console.log('go to install!');
this.render('install');
}
}
} else {
this.next();
}
});
을 그리고 여기에 비동기 조건
을 기준으로 경로를 설정할 수 있습니다보다 일반적인 패턴은
Router.onBeforeAction(function (params) {
var self = this;
this.wait(function(){
Meteor.call('someMethod', function (err, result) {
Session.set('someMethodCalled', true);
// do whatever with result...
Session.set('someCondition', true);
});
return {
ready: function() {
return Session.get('someMethodCalled');
self.next();
}
}
});
if (this.ready()) {
if (Session.get('someCondition')) {
this.next();
} else if(Session.get('someCondition') === false) { // important to be explicit ===
this.render('someSpecificRoute');
}
}
});
간단한 해결책은 다음, 숨겨진 사업부를하는 것입니다 스크립트가 실행될 때 보여줍니다. – Neoaptt