sproutcore 定时器使用 MaxInactiveInterval
sproutcore timer usage MaxInactiveInterval
两个绝对初学者的问题。
我的 main.js enterState 中有工作代码。
enterState: function(context) {
..
//keepAlive
var now = SC.DateTime.create();
if (now.get('hour') < 18){
SC.info ("main_state:enterState:go %@", now.get('hour'));
this.timer = SC.Timer.schedule({
target: this,
action: '_timerFired',
interval: 5000,
repeats: YES
});
} else {
SC.info ("MainState:enterState:nogo %@", now.get('hour'));
};
..
this.mainPane.append();
},
_timerFired: function(){
SC.info ("_timerFired %@", Date.now());
},
exitState: function() {
SC.info('main_state:exitState');
this.timer.invalidate();
this.mainPane.remove();
},
问题一:enterState是每次进入主视图都会用到,timer schedule是只初始化一次还是每次切换视图都初始化?
问题2:我想我需要一个查询。 e.q。登录的用户名,以防止由于会话 MaxInactiveInterval 过期而自动注销。 _timerFired 函数中是否有获取 spring 用户名的示例代码?
我看到了 Maurits 的 answer/solution,谢谢,但是它对我来说太复杂了。
每次进入此状态时都会安排此计时器。如果这是应用程序的根状态,那将是一次。如果此状态用于显示 mainPane 并且您以某种方式离开此状态并返回,则每次进入此状态时都会初始化此计时器。
您可以将用户名保留为当前状态的 属性 (this._username),并且在调用 _timerFired 时这是当前状态(SC.Timer 将通过目标来处理)您将可以访问它。当然,您需要以某种方式设置它。另一种解决方案是直接从您用于登录过程的控制器读取它。
不过,这个解决方案容易出问题。这样做的主要原因是您正在创建隐式状态。我的意思是,被认证是一种应用程序状态,而不是通过状态图明确这一点,而是将其隐藏在其中一个状态中。正如我在评论中所写:由于尝试了许多不同的解决方案并遇到了麻烦,我来到了我在另一个问题中发布的解决方案。我从这些问题中学到的是,状态图是您的朋友,真正尝试使用它会帮助您避免大量头痛!
两个绝对初学者的问题。 我的 main.js enterState 中有工作代码。
enterState: function(context) {
..
//keepAlive
var now = SC.DateTime.create();
if (now.get('hour') < 18){
SC.info ("main_state:enterState:go %@", now.get('hour'));
this.timer = SC.Timer.schedule({
target: this,
action: '_timerFired',
interval: 5000,
repeats: YES
});
} else {
SC.info ("MainState:enterState:nogo %@", now.get('hour'));
};
..
this.mainPane.append();
},
_timerFired: function(){
SC.info ("_timerFired %@", Date.now());
},
exitState: function() {
SC.info('main_state:exitState');
this.timer.invalidate();
this.mainPane.remove();
},
问题一:enterState是每次进入主视图都会用到,timer schedule是只初始化一次还是每次切换视图都初始化?
问题2:我想我需要一个查询。 e.q。登录的用户名,以防止由于会话 MaxInactiveInterval 过期而自动注销。 _timerFired 函数中是否有获取 spring 用户名的示例代码?
我看到了 Maurits 的 answer/solution,谢谢,但是它对我来说太复杂了。
每次进入此状态时都会安排此计时器。如果这是应用程序的根状态,那将是一次。如果此状态用于显示 mainPane 并且您以某种方式离开此状态并返回,则每次进入此状态时都会初始化此计时器。
您可以将用户名保留为当前状态的 属性 (this._username),并且在调用 _timerFired 时这是当前状态(SC.Timer 将通过目标来处理)您将可以访问它。当然,您需要以某种方式设置它。另一种解决方案是直接从您用于登录过程的控制器读取它。
不过,这个解决方案容易出问题。这样做的主要原因是您正在创建隐式状态。我的意思是,被认证是一种应用程序状态,而不是通过状态图明确这一点,而是将其隐藏在其中一个状态中。正如我在评论中所写:由于尝试了许多不同的解决方案并遇到了麻烦,我来到了我在另一个问题中发布的解决方案。我从这些问题中学到的是,状态图是您的朋友,真正尝试使用它会帮助您避免大量头痛!