将超时设置为layoutTemplate流星/铁
Set timeout to layoutTemplate meteor / iron
我一直在努力为我的loadingTemplate设置3秒的超时。
使用下面的代码loadingTemplate是呈现的,但它确实在经过3秒钟后重定向到layoutTemplate,正如我所期望的那样。
请在下面找到我的代码和评论问题。
我还将此版本部署到http://ns1-timeout.meteor.com/
我感谢你的帮助。
Router.configure({
layoutTemplate: 'applayout',
loadingTemplate: 'loading',
waitOn: function () {
var isTimePassed = false;
var clock = 3;
var timeLeft = function() {
if (clock > 0) {
clock--;
Session.set("time", clock);
console.log(clock);
} else {
console.log("That's All Folks");
//return true
isTimePassed = true;
Meteor.clearInterval(interval);
console.log('is Time passed: '+ isTimePassed);
return isTimePassed; // seems it is being ignored
}
};
var interval = Meteor.setInterval(timeLeft, 1000);
return {
ready: function () {
console.log('return ready: ' + isTimePassed);
return isTimePassed; // keeps the loading page and does not redirect to applayout if changed to false, loadingTemplate is not loaded and
}
}
}
});
从setInterval返回不会有任何作用。您需要使用一个反应变量,并准备好返回该反应变量的值:
Router.configure({
layoutTemplate: 'applayout',
loadingTemplate: 'loading',
waitOn: function () {
Session.set('isTimePassed', false);
var isTimePassed = false;
var clock = 3;
var timeLeft = function() {
if (clock > 0) {
clock--;
Session.set("time", clock);
console.log(clock);
} else {
console.log("That's All Folks");
//return true
isTimePassed = true;
Meteor.clearInterval(interval);
console.log('is Time passed: '+ isTimePassed);
Session.set('isTimePassed', true);
}
};
var interval = Meteor.setInterval(timeLeft, 1000);
return {
ready: function () {
return Session.get('isTimePassed');
}
}
}
});
然而,在你的问题中,这是否是你想要做的并不完全清楚。
经过几个小时的工作,我发现为加载模板设置自定义超时的最佳方法不是使用Router.configure。正确的方法是将对onBeforeAction函数的调用设置为my/route。因此代码结束如下:
Router.configure({
layoutTemplate: 'appLayout',
loadingTemplate: 'loading'
});
Router.onBeforeAction(function(){
if(!Session.get('templateLoaded'))
{
setTimeOut(1000);
this.layout('loading');
this.render('loading');
}
else
{
this.render('home');
this.next();
}
},
{
only: ['home']
});
var setTimeOut = function (timeout) {
var self = this;
self._ready = false
self._dep = new Tracker.Dependency();
Meteor.setTimeout(function () {
self._ready = true;
self._dep.changed();
if(Meteor.isClient){
Session.set('templateLoaded', true); // set session variable to true so applayout Template will be rendered
}
}, timeout);
return function () {
self._dep.depend();
return function () {
return self._ready;
}
}
};
相关文章:
- 如何使用铁流星与流星的默认路线
- 在流星上使用微信js-sdk时出现拒绝权限错误
- 流星中DOM的繁殖
- 保存串行端口列表与流星
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 流路由器流星的历史
- 动态路径用于流星/铁路由器
- 流星的全球可变范围
- 流星收集更新不是在更新文档
- 在流星中react不工作的defaultValue
- 剑道UI不与流星合作
- 将HTML5模板转换为流星.js,关于js init的问题
- 流星:点击激活其他模板
- 使用流星调用时,可以多次访问流星中的某个函数
- 流星蒙戈的返回阵列
- 如何处理流星变量&对miniMongo有问题
- 流星JS:铁路由器点击按钮
- 我的流星路线出了什么问题
- 流星和铁路由器中的gzip和minimy服务器路由响应
- 在流星中插入嵌套对象