我正在使用 PhoneGap LocalNotification 插件,它允许我在特定时间设置本地通知。
LocalNotification 插件的基本结构是这样的:
var notification = {
init: function () {
},
clear_all: function () {
notification.clear();
plugins.localNotification.add({
badge: 0,
});
},
alert_ten: function () {
var d = new Date();
d = d.getTime() + 10 * 1000; //60 seconds from now
d = new Date(d);
plugins.localNotification.add({
date: d,
repeat: 'daily',
message: varone + ' - ' + vartwo + '!',
hasAction: true,
badge: 1,
id: '1',
sound: 'horn.caf',
background: 'app.background',
foreground: 'app.running'
});
},
}
如果您查看通知的消息部分,它由以下内容组成varone + ' - ' + vartwo + '!'
。在页面加载时,varone
从项目vartwo
中填充。localStorage
然后我调用notification.alert_ten()
onLoad。
这一切都很好,但有一个例外:
这些localStorage
项目是在用户与某个 div 交互时设置的,即单击它。然后,当应用程序加载时,它会检查这些值,并在 10 秒后提醒消息,说this
和that
,它从 LS 获取它们的值。
如果用户改变主意,并与改变 LS 项的不同 div 交互,LocalNotification 仍会使用原始 LS 项集运行。
这是意料之中的,因为 JS 会在函数中缓存变量。我认为可行的解决方案是在全局定义变量 above var notification = {
,然后当用户与 div 交互时,更新 vars 以表示新变量。
全局变量:
var varone = localStorage.getItem("favorite");
var vartwo = localStorage.getItem("favorite-status").substr(2).toLowerCase();
...
更新变量:
...
var varone = text;
var vartwo = favstatus;
...
该函数notification.alert_ten()
仍然使用全局变量中定义的原始值运行,而不是更新后的值。