多次触发击倒点击事件

时间:2014-05-02 07:59:53

标签: javascript jquery jquery-mobile cordova knockout.js

我正在使用jquerymobile和knockout的单页phonegap应用程序。

在JqueryMobile页面内部我已经按如下方式定义了sampleViewModel()。

function sampleViewModel()
{
var self=this;
var hourvalue=14;
self.sample_data= ko.observableArray([
            { title: "hello", hour:hourvalue }    
        ]);
}

//上述视图模型的变量声明

var sample_datavar = { viewModel: new sampleViewModel() };

我想根据当前系统小时值更改小时值。任何更好的解决方案都值得赞赏。

我正在尝试以下逻辑,其中我将每秒获得系统小时,并通过该变量赋值将其传递给数据源。

setInterval(function () {
        var now = new Date();
        var hour = now.getHours();
        if (hour.toString().length == 1) {
            var hour = '0' + hour;
        }

sample_datavar.viewModel.sample_data([
            { title: "hello", hour:hourvalue }    
        ]);
  },1000);

问题是我只能在clickinit调用函数内部的click事件中定义它。

1)有没有办法让淘汰赛点击功能在jquery mobile的pageshow事件中触发?

2)如果事情变得复杂了?有没有更好的方法来进行小时值变化?

1 个答案:

答案 0 :(得分:2)

首先,如果时间已经改变,请不要每秒检查一次,它会伤害我的眼睛:) - 无论系统的时间是否应该意外改变。

那为什么你需要一个点击事件?你为什么不开始检查加载,然后反复检查?

您可以计算下次检查前的秒数(您可以在不检查的情况下设置新的小时):

function sampleViewModel()
{
    var self=this;
    var hourvalue=14;
    self.sample_data= ko.observableArray([
            { title: "hello", hour:hourvalue }    
        ]);
}

var viewModel = new sampleViewModel();
ko.applyBindings(viewModel);

function checkHour() {
        var now = new Date();
        var hour = now.getHours();
        var secondsBeforeNextCheck = 3600 - now.getMinutes() * 60 - now.getSeconds() +1;
        document.getElementById('calculatedSeconds').innerHTML = secondsBeforeNextCheck;
        if (hour.toString().length == 1) {
            var hour = '0' + hour;
        }

        viewModel.sample_data([
            { title: "hello", hour:hour }    
        ]);
        setTimeout(checkHour, secondsBeforeNextCheck * 1000);
}

checkHour();

http://jsfiddle.net/7nBNW/2/