2014-05-02 183 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/