我正在使用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)如果事情变得复杂了?有没有更好的方法来进行小时值变化?
答案 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();