我正在开发一个使用jquerymobile和knockout的单页phonegap应用程序。
在 JqueryMobile pageInit 中,我定义了sampleViewModel(),如下所示。
function sampleViewModel()
{
var self=this;
var hourvalue=14;
self.sample_data= ko.observableArray([
{ title: "hello", hour:hourvalue }
]);
}
//上述 View 模型的变量声明
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);
问题是我只能在 pageinit 调用函数内部的单击事件中定义它。
1)有没有办法让knockout click功能在jquery mobile的pageshow事件内部触发?
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();
关于javascript - 多次触发 knockout 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23423439/