2

我正在使用 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 秒后提醒消息,说thisthat,它从 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()仍然使用全局变量中定义的原始值运行,而不是更新后的值。

4

1 回答 1

1

您可以编写 getter/setter 函数。这只是一个概念证明,您可以添加任何您喜欢的方法。只需确保this.在您想要在对象内部的函数之间共享的任何属性之前添加,或者您想要从对象外部访问的任何属性。

var notification = {
  setX : function (newX) {
    this.x = newX;
  },
  getX : function () {
    return this.x;
  },
  outputX : function () {
    document.write('x is ' + this.x + '<br>');
  }
}

初始化和使用:

notification.setX(42);
console.log(notification.getX());

或者

notification[x] = 42;
console.log(notification[x]);

甚至

notification.x = 42;
console.log(notification.x);

演示

所以你的代码可能是这样的(除有趣的部分之外的所有部分)

var notification = {
    getMessage: function() {
        return this.message;
    },
    setMessage: function() {
        this.message = localStorage.getItem("favorite") + ' - ' + 
                       localStorage.getItem("favorite-status").substr(2).toLowerCase() + '!';
    },
    alert_ten: function () {
        plugins.localNotification.add({
            message: this.getMessage()
        });
    }
}

// After some event I guess
notification.setMessage();
// After some other event?
notification.alert_ten();
于 2012-10-24T02:39:29.693 回答