1

このコードの問題を特定できないようで、スラッシングしています。うまくいけば、より優れた Javascript チョップを持つ誰かが、私が間違っていることを理解できるでしょう。Chrome コンソールには、毎秒更新される値が表示されますが、ビューにバインドされません。http://jsfiddle.net/PLSMW/7/にjsfiddleがあります

HTMLバインディングは単純です:

js ファイル:

function viewModel() {
    var self = this;

    self.BigDay = new Date("03 Jun 2013, 14:30:00");
    self.msPerDay = 24 * 60 * 60 * 1000;
    self.countdown = ko.observable("24:00:00:00");

    self.tick = function () {

        var today = new Date();
        var timeLeft = (self.BigDay.getTime() - today.getTime());

        var e_daysLeft = timeLeft / self.msPerDay;
        var daysLeft = Math.floor(e_daysLeft);

        var e_hrsLeft = (e_daysLeft - daysLeft) * 24;
        var hrsLeft = Math.floor(e_hrsLeft);

        var e_minsLeft = (e_hrsLeft - hrsLeft) * 60;
        var minsLeft = Math.floor(e_minsLeft);

        var e_secsLeft = (e_minsLeft - minsLeft) * 60;
        var secsLeft = Math.floor(e_secsLeft);
        self.countdown = daysLeft + " : " + hrsLeft + " : " + minsLeft + " : " + secsLeft;
        console.log(self.countdown);
    };
    setInterval(self.tick, 1000);
}
ko.applyBindings(new viewModel());
4

2 に答える 2

4

オブザーバブルは であるfunctionため、更新された値に直接設定することはできません。代わりに、それを呼び出す必要があります。

self.countdown(daysLeft + " : " + hrsLeft + " : " + minsLeft + " : " + secsLeft);

そしてそれをコンソールに表示するには、あなたがするべきです

console.log(self.countdown());
于 2013-05-08T07:25:28.810 に答える
-2

Knockout computable http://knockoutjs.com/documentation/computedObservables.htmlを見る必要があります

于 2013-05-08T07:26:38.060 に答える