2014-05-02 221 views
0

我正在使用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() }; 

我想改变基于当前系统小时值的hourvalue。任何更好的解决方案相同的赞赏。

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

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); 

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

1)有没有一种方法可以在jquery mobile的pageshow事件中触发knockout click函数?

2)如果事情复杂化?有没有更好的方式来做小时值变化?

回答

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/