Knockout.js 计算的KnockoutJS未定义

Knockout.js 计算的KnockoutJS未定义,knockout.js,Knockout.js,我有一个由两个基于整数的可观测值组成的计算可观测值,我正试图将其转换为时间跨度值。通过查看文档似乎应该很容易,但我从我的计算结果中得到了一个未定义的值:未定义的值。如果很难理解,请道歉。非常感谢您的帮助。这是我的JS: var Routine = function (routine_name, minutes, seconds, duration, rest, rounds) { this.routine_name = ko.protectedObservable(routine_nam

我有一个由两个基于整数的可观测值组成的计算可观测值,我正试图将其转换为时间跨度值。通过查看文档似乎应该很容易,但我从我的计算结果中得到了一个未定义的值:未定义的值。如果很难理解,请道歉。非常感谢您的帮助。这是我的JS:

var Routine = function (routine_name, minutes, seconds, duration, rest, rounds) {
    this.routine_name = ko.protectedObservable(routine_name);
    this.minutes = ko.protectedObservable(minutes);
    this.seconds = ko.protectedObservable(seconds);
    //this.duration = ko.protectedObservable(duration);
    this.rest = ko.protectedObservable(rest);
    this.rounds = ko.protectedObservable(rounds || 1);

    this.duration = ko.computed(function () {
        return this.minutes + ':' + this.seconds;
    });

} 

var RoutineModel = function (Routines) {

    var self = this;
    self.routine_id = ko.observable();
    self.routine_name = ko.observable();
    //self.duration = ko.observable();
    self.minutes = ko.observable();
    self.seconds = ko.observable();
    self.rest = ko.observable();
    self.rounds = ko.observable();
    self.workout_name = ko.observable();

    self.duration = ko.computed(function () {
        return self.minutes() + ':' + self.seconds();
    });

this.Routines = ko.observableArray(Routines);

this.selectedRoutine = ko.observable();

this.addRoutine = function () {

            var newRoutine = new Routine("new routine", 0, 0, 0, 0);
            self.Routines.push(newRoutine);
            self.selectedRoutine(newRoutine);

    };

this.acceptRoutineEdit = function () {
        var selectedRoutine = self.selectedRoutine();
        selectedRoutine.routine_name.commit();
        selectedRoutine.minutes.commit();
        selectedRoutine.seconds.commit();
        //selectedRoutine.duration.commit();
        selectedRoutine.rest.commit();
        selectedRoutine.rounds.commit();
        self.selectedRoutine(null);

        selectedRoutine.duration = ko.computed(function () {
            return selectedRoutine.minutes + ':' + selectedRoutine.seconds;
        });
    };
};

您的
持续时间
是使用
计算的,并且是使用错误的上下文计算的

当定义一个
计算的
时,可以传入第二个参数,以控制计算值如下时该的值:

   this.duration = ko.computed(function () {
        return this.minutes() + ':' + this.seconds();
    }, this);
您的其他计算机不使用此,因此似乎没有相同的问题

此外,在此computed和selectedRoutine.duration中,请确保将Observable作为函数调用,以检索其值,如:

return selectedRoutine.minutes() + ':' + selectedRoutine.seconds();
您还可以在例程中使用“var self=this”,就像您在RoutineModel中所做的那样,并使用self来代替这个。