1

我创建了以下模型,但我不明白为什么 pureComputed 可观察ApprovalIconCSS无法从其函数上下文访问 Approved() 可观察对象。

function KOViewModel() {
    var self = this;
    self.IsAdding = ko.observable(false);
    self.IsEnabled = ko.observable(true);
    self.ApprovalType = ko.observable(0);

    var RowControl = function() {
        return {
            Approved: ko.observable(null),
            ApproverNotes: ko.observable(''),
            ApprovalIconCSS: ko.pureComputed(function() {
                if (this.Approved() == 0)
                    return 'glyphicon glyphicon-remove-circle';
                if (this.Approved() == 1)
                    return 'glyphicon glyphicon-ok-circle';
                if (this.Approved() == 2)
                    return 'glyphicon glyphicon-time';
                return '';
            }, this)
        };
    };

    self.RowControls = ko.observableArray([RowControl()]);
}

欣赏是否有人可以阐明为什么无法访问上下文。干杯!

4

1 回答 1

1

您需要调用RowControlswith new,并且需要将属性附加到函数的this对象RowControl,而不是返回不同的对象。

var RowControl = function() {
    this.Approved = ko.observable(null);
    this.ApproverNotes = ko.observable('');
    this.ApprovalIconCSS = ko.pureComputed(function() {
        if (this.Approved() == 0)
            return 'glyphicon glyphicon-remove-circle';
        if (this.Approved() == 1)
            return 'glyphicon glyphicon-ok-circle';
        if (this.Approved() == 2)
            return 'glyphicon glyphicon-time';
        return '';
    }, this)
};

self.RowControls = ko.observableArray([new RowControl()]);

返回文字对象的问题是ko.pureComputed使用该this对象调用,如果您返回不同的对象,而不是向 、 、然后添加属性this,则该this对象和结果new RowControl()(即具有“已批准”属性的对象)是两个不同的对象。

于 2014-12-16T01:26:55.973 回答