Инициирование нокаутирующего клика несколько раз

0

Я работаю над одностраничным приложением, которое использует jquerymobile и нокаутом.

Внутри JqueryMobile pageInit я определил 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);

Проблема в том, что я могу определить это только внутри события click, которое будет внутри функции вызова на странице.

1) Есть ли способ заставить функцию клика для нокаута вызывать внутри события showhow jquery mobile?

2) Если что-то усложняет?.. Есть ли лучший способ сделать это изменение часов?

Теги:
cordova
knockout.js
jquery-mobile

1 ответ

2
Лучший ответ

Прежде всего, пожалуйста, не проверяйте каждую секунду, если час изменился, это больно моим глазам. --unless время системы должно неожиданно измениться.

Тогда зачем вам нужно событие click? Почему бы вам просто не начать проверять при загрузке, а затем проверять снова и снова?

Вы можете рассчитать секунды перед следующей проверкой (вы можете установить новый час без проверки):

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/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню